GUICtrlCreatePic Problem

  • Sers zusammen,

    Hab da mal wieder ein Problem. Hab folgenden, ganz einfachen, Code :

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>

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

    $gui = GUICreate("test", 1100, 900)
    $path = @AppDataDir & "\Pics\sysinfo.jpg"
    $x = x()
    $y = y()
    $pic = GUICtrlCreatePic("" & $path, 260, 10, $x, $y)

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

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

    Func x()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $x = _GDIPlus_ImageGetWidth($hImage)
    _GDIPlus_Shutdown()
    Return $x
    EndFunc ;==>x

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

    Func y()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $y = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_Shutdown()
    Return $y
    EndFunc ;==>y

    [/autoit]

    Wie schaffe ich das das Bild wieder frei gegeben wird, da

    [autoit]

    $pic = GUICtrlCreatePic("" & $path, 260, 10, $x, $y)

    [/autoit]

    nicht funktioniert (gibt 0 zurück). Wenn ich einen anderen Pfad nehme und

    [autoit]

    $pic = GUICtrlCreatePic("" & $path2, 260, 10, $x, $y)

    [/autoit]

    benutze klappt´s ohne Probleme.

    Weis nicht wirklich weiter. Hab mich auch noch nicht intensiv mit GDIPlus beschäftigt, finde aber keine andere Möglichkeit die Breite und Höhe eines Bildes zu bestimmen. Die ExtProp.au3 liefert immer 0 zurück. Vielleicht liegt´s ja an Windows 7 Ultimate x64

    Hat da einer eine Idee ?

    Einmal editiert, zuletzt von MrB (20. März 2010 um 16:02)

    • Offizieller Beitrag

    Versehe dein Problem nicht wirklich. Denke aber du willst die Dateisperre aufheben.

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>

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

    $gui = GUICreate("test", 1100, 900)
    $path = @AppDataDir & "\Pics\sysinfo.jpg"
    $x = x()
    $y = y()
    $pic = GUICtrlCreatePic("" & $path, 260, 10, $x, $y)

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

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

    Func x()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $x = _GDIPlus_ImageGetWidth($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $x
    EndFunc ;==>x

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

    Func y()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $y = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $y
    EndFunc ;==>y

    [/autoit]
  • Hallo MrB,

    so geht das Laden noch ein paar MilliSec's schneller:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>

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

    Global $x, $y
    $gui = GUICreate("test", 1100, 900)
    $path = @AppDataDir & "\Pics\sysinfo.jpg"
    _GetXY($path, $x, $y)
    $pic = GUICtrlCreatePic($path, 260, 10, $x, $y)

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

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

    Func _getxy($sFile, ByRef $ix, ByRef $iy)
    Local $ret = 1
    If Not FileExists($sFile) Then Return 0
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    $ix = _GDIPlus_ImageGetWidth($hImage)
    $iy = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    ConsoleWrite($x & " " & $y & @CRLF)
    Return 1
    EndFunc ;==>_getxy

    [/autoit]

    mfg (Auto)Bert