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]
  • Danke euch beiden.

    War genau das was ich suchte. Funktioniert einwandfrei

    @Raupi

    Vielleicht nicht verstanden aber richtig geantwortet :)

  • 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