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