Hallo mein problem ist das ich gerne bilder aus meiner dll laden möchte und diese mit imagesearch verwenden will.
ich will die bilder aus dll's laden da des mehrere hundert werden können und das ziemlich unschön is wenn man einen imageordner hat mit zig images drin. xD
Ich habe auch _GetImagefromResource probiert aber die gibt nur ein handle zurück welches Imagesearch nich verwenden kann.
Hier die GetImagefromResource UDF vll fällt euch was ein:
[autoit]
;#Function# ============================================================================================================================================
; Name............: _GetImagefromResource
; Description.....: Laden eines Bildes (BMP,GIF,JPG) aus einer Resourcedatei
; Syntax..........: _GetImagefromResource($Resname, $Resfile = -1, $ResType = 10)
; Parameters......:
; $Resname - Name der Resource
; $Resfile - Resourcedateiname , wenn leer wird die Autoit Exe Datei verwendet
; $ResType - Resourcetype 2= Bitmap, alle anderen = 10. GIF und JPG Dateien müssen als RCDATA gespeichet sein.
; Return values .:
; Success - Handle des des Bitmaps
; Failure - Comming soon
; Author ........:
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ======================================================================================================================================================
#Include <Memory.au3>
Func _GetImagefromResource($Resname, $Resfile = -1, $ResType = 10)
Local Const $IMAGE_BITMAP = 0
Local $hmod, $hwnd, $InfoBlock, $ResSize, $Mem, $pMem, $dll, $dll2, $hData, $pData, $pStream, $ret, $hBitmap, $pBitmap
If $Resfile = -1 Then; Resfile = Executable Autoit Exe
$hmod = _WinAPI_GetModuleHandle("")
If @error Then Return SetError(1, 0, 0)
Else
$hmod = _WinAPI_LoadLibrary($Resfile)
If @error Then Return SetError(2, 0, 0)
EndIf
If $ResType =2 Then
$hBitmap = _WinAPI_LoadImage($hmod, $Resname, $IMAGE_BITMAP, 0, 0, 0)
If @error Then Return SetError(3, 0, 0)
If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
Return $hBitmap
Else
$InfoBlock = DllCall("kernel32.dll", "int", "FindResourceA", "int", $hmod, "str", $Resname, "long", $ResType)
If @error Then Return SetError(4, 0, 0)
$InfoBlock = $InfoBlock[0]
If $InfoBlock = 0 Then Return SetError(5, 0, 0)
$ResSize = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hmod, "int", $InfoBlock)
If @error Then Return SetError(6, 0, 0)
$ResSize = $ResSize[0]
If $ResSize = 0 Then Return SetError(7, 0, 0)
$Mem = DllCall("kernel32.dll", "int", "LoadResource", "int", $hmod, "int", $InfoBlock)
If @error Then Return SetError(8, 0, 0)
$Mem = $Mem[0]
If $Mem = 0 Then Return SetError(9, 0, 0)
$pMem = DllCall("kernel32.dll", "int", "LockResource", "int", $Mem)
If @error Then Return SetError(8, 0, 0)
$pMem = $pMem[0]
If $pMem = 0 Then Return SetError(10, 0, 0)
If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
$hData = _MemGlobalAlloc($ResSize, 2)
$pData = _MemGlobalLock($hData)
_MemMoveMemory($pMem, $pData, $ResSize)
_MemGlobalUnlock($hData)
$ret = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0)
$pStream = $ret[3]
_GDIPlus_Startup()
$pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
$pBitmap = $pBitmap[2]
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
_GDIPlus_BitmapDispose($pBitmap)
_GDIPlus_Shutdown()
$dll = DllStructCreate("Uint", $pStream)
$dll2 = DllStructCreate("uInt", DllStructGetData($dll, 1) + ![]()
DllCall("", "UInt", DllStructGetData($dll2, 1), "UInt", $pStream)
_WinAPI_DeleteObject($pStream)
$pStream = 0
_MemGlobalFree($hData)
If $Resname <> -1 Then _WinAPI_FreeLibrary($hmod)
Return $hBitmap
EndIf
EndFunc ;==>_GetImagefromResource
ich hab schon überall gesucht aber finde keine lösung könnt ihr mir helfen?
danke