Problem mit dem Handle von images bei 32 Bit images
Verfasst: 28.04.2009 17:34
Hallo
Ich habe folgenden Code aus einem anderen Beispiel aus dem (englischen?) Forum zusammengestöpselt.
Er vergleicht 2 Bilder, die mit PB erstellt wurden, indem er den Bilderspeicher per CompareMemory bergleicht.
Seltsamerweise geht das mit 24-bit Bildern, nicht aber mit 32 bit Bildern?
(BITMAP)\bmBits gibt dann immer 0 zurück.
Kann mir jemand sagen warum? Und wie man das mit 32 bit Images zu laufen bekommt?
Vielen Dank schon mal...
Ich habe folgenden Code aus einem anderen Beispiel aus dem (englischen?) Forum zusammengestöpselt.
Er vergleicht 2 Bilder, die mit PB erstellt wurden, indem er den Bilderspeicher per CompareMemory bergleicht.
Seltsamerweise geht das mit 24-bit Bildern, nicht aber mit 32 bit Bildern?
(BITMAP)\bmBits gibt dann immer 0 zurück.
Kann mir jemand sagen warum? Und wie man das mit 32 bit Images zu laufen bekommt?
Vielen Dank schon mal...
Code: Alles auswählen
Procedure.i CompareImage(Image1, Image2) ; compares two images - returns -1: error 0: identically 1: different size 2: different content
Back_I.i = -1
Protected bmp1.BITMAP, bmp2.BITMAP, Size1, Size2, *Memory1, *Memory2
If GetObject_(Image1, SizeOf(BITMAP), @bmp1)
Size1 = (bmp1\bmWidth * bmp1\bmHeight)
*Memory1 = bmp1\bmBits
Debug *Memory1
If GetObject_(Image2, SizeOf(BITMAP), @bmp2)
Size2 = (bmp2\bmWidth * bmp2\bmHeight)
*Memory2 = bmp2\bmBits
Debug *Memory2
If Size1 <> Size2
Back_I = 1
Else
If CompareMemory(*Memory1, *Memory2, Size1) = 1 ; identically
Back_I = 0
Else
Back_I = 2
EndIf
EndIf
EndIf
EndIf
ProcedureReturn Back_I
EndProcedure
CreateImage(1, 128, 128, 24)
CreateImage(2, 128, 128, 24)
CreateImage(3, 128, 128, 24)
; try this insted, it wont work
; CreateImage(1, 128, 128)
; CreateImage(2, 128, 128)
; CreateImage(3, 128, 128)
If StartDrawing(ImageOutput(1))
Box(0, 0, 128, 128, $000002)
StopDrawing()
EndIf
If StartDrawing(ImageOutput(2))
Box(0, 0, 128, 128, $000002)
StopDrawing()
EndIf
If StartDrawing(ImageOutput(3))
Box(0, 0, 128, 128, $000001)
StopDrawing()
EndIf
Debug CompareImage(ImageID(1), ImageID(2))
Debug CompareImage(ImageID(1), ImageID(3))
End