bilder aus Dll laden und in Imagesearch verwenden

  • 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>

    [/autoit][autoit][/autoit][autoit]

    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) + 8)
    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

    [/autoit]


    ich hab schon überall gesucht aber finde keine lösung könnt ihr mir helfen?

    danke

    2 Mal editiert, zuletzt von BlackPsycho (20. Juli 2011 um 22:42)

  • Ich weiß was du meinst, aber hab KEINE Ahnung wie das geht, sry, jedoch habe ich eine andere Möglichkeit:
    Du kannst ja die ganzen Bilder statt in eine DLL in ein Gesamtbild packen, das heißt alle an ein anderreihen und dann als gesamtes Bild abspeichern und dann kannst du das per GDI+ Ausschnittwiese anzeigen, Suchen, etc., was du auch wilst

    Zum Beitrag

    ich hoffe das hilft.

    mfg
    hauke96

  • Mit FileInstall() kann ich die in meine Exe Packen und nachher entpacken, wenn ich die dateien dann einfach vorm ende des loops lösch hab ich nur eins :)