GDI+ sperrt Dateien

  • Hi,

    ich habe das Problem, dass GDI+ die Bildateien welche mit _GDIPlus_ImageLoadFromFile geladen werden nichtmehr freigibt, sprich ich sie so lange das Programm noch läuft nicht löschen kann, obwohl ich eigentlich die Ressource mit _GDIPlus_ImageDispose freigebe.

    Weiß einer was ich falsch mache:

    Spoiler anzeigen
    [autoit]

    Func merge($x, $y, $width, $height, $save, $orientation, $nachbar = "")

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

    _GDIPlus_Startup()

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

    $merger = GUICreate("Form1", 400, 400)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($merger)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($x * $width, $y * $height, $hGraphic)
    $hGraphic1 = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    $count = 0

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

    For $i = 0 To $y - 1 Step 1
    For $k = 0 To $x - 1 Step 1
    $hSource = _GDIPlus_ImageLoadFromFile($save & "\" & $orientation & $nachbar & "\" & $count & ".jpeg")

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

    _GDIPlus_GraphicsDrawImage($hGraphic1, $hSource, 256 * $k, 256 * $i)
    $count = $count + 1
    Next
    Next

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

    _GDIPlus_ImageSaveToFile($hBitmap, $save & "\" & $orientation & $nachbar & ".jpeg")

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

    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBitmap)
    _GDIPlus_ImageDispose($hSource)
    _GDIPlus_Shutdown()
    EndFunc ;==>merge

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (31. Mai 2013 um 16:51)

  • Du gibst die Bilder nicht wieder frei!
    Du gibst lediglich das Image-Handle der zuletzt in der Schleife geöffneten Datei wieder frei...
    Das _GDIPlus_ImageDispose gehört auch in die Schleife.

    Edit: $hBitmap gibst du auch nie wieder frei...

    lg


  • Edit: $hBitmap gibst du auch nie wieder frei...


    Mh wiso? Ich habe doch "_GDIPlus_GraphicsDispose($hBitmap)"

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • a) Gibst du eine Zeichenoberfläche (Graphics) frei, keine Bitmap. Du musst schon _GDIPlus_BitmapDispose verwenden. ^^
    b) Gibst du die aus der Bitmap erstellte Zeichenoberfläche ($hGraphics1) auch nicht wieder frei ( -> _GDIPlus_GraphicsDispose). ^^

    lg