Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 05.03.2010, 19:02 Titel: Speicher wieder freigeben |
|
|
Unter in der Funktion wird der Speicher jedesmal neu aufgerufen:
Dim As ANY PTR Image = IMAGECREATE(breit, hoch)
aber beim Verlassen der Funktion nicht freigegeben.
Braucht der Speicher hier nicht freigegeben werden?
gruss
Code: |
FUNCTION FIBitmap2FBImage(BYVAL Dib AS FIBITMAP PTR ) AS ANY Ptr
DIM AS UINTEGER bpp, breit, hoch, pitch
FreeImage_FlipVertical(Dib) 'Bild steht sonst auf dem Kopf
Dib = FreeImage_ConvertTo32Bits(Dib)'nur im 32-BIT FORMAT
breit = FreeImage_GetWidth(Dib)
hoch = FreeImage_GetHeight(Dib)
Dim As ANY PTR Image = IMAGECREATE(breit, hoch), ximage = Image
DIM AS UINTEGER PTR buffer = Image 'erleichtert den Imageheader auszuwerten
DIM AS UBYTE PTR FIpixel = FreeImage_GetBits(Dib)
bpp = buffer[1] 'dies sind BYTE per Pixel
IF bpp <> 4 THEN RETURN NULL 'nur im 32-BIT FORMAT
pitch = buffer[4] 'Anzahl BYTE pro Zeile (.align 16)
ximage += 32 '+ SIZEOF FBImageHeader
FOR i AS INTEGER = 1 TO hoch ' Die Bilddaten zeilenweise kopieren
mmxcopy ximage, FIpixel, breit * bpp
FIpixel+= (breit * bpp)
ximage += pitch 'sonst verzerrt das Bild
NEXT
FreeImage_Unload(Dib)
FUNCTION = Image
End FUNCTION
|
|
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 05.03.2010, 19:20 Titel: |
|
|
Muss man nicht, sollte man aber trotzdem tun:
Code: | ImageDestroy(Image) |
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 05.03.2010, 23:14 Titel: |
|
|
Ich vermute mal, der Speicher wird in der Funktion nicht freigegeben, weil du ihn außerhalb der Funktion noch gebrauchen können sollst. Immerhin wird dir dieser Speicher ja zurückgegeben. Ein Freigeben per Hand ist dringend anzuraten, da ein Programmende den Speicher nicht freigeben wird. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|