Zwei Sprites vergleichen
Verfasst: 31.01.2011 12:42
Hallo
Ich habe zwei Grafiken.
Von diesen beiden Grafiken möchte ich von einem Bereich (z.B. 50x50 Pixel) den prozentualen Unterschied berechnen, und dies viele male.
Das funktioniert auch:
Doch dies ist mir zu langasm. Da habe ich mir gedacht, dass ich Sprite3D benutze, um die beiden Sprites übereinander zu legen.
Damit ich den Unterschied der beiden Sprites erhalte, müsste ich das eine vom anderen subtrahieren.
Dazu gibt es die funktion Sprite3DBlendingMode(Ausgangsmodus, Zielmodus).
Doch wie kann ich damit das eine Sprite vom anderen subtrahieren?
Oder ist es damit nicht möglich?
Welche Möglichkeiten habe ich sonst noch?
Mein Ziel ist es letztendlich eine Controlpoint Generator zu programmieren, ähnlich wie http://user.cs.tu-berlin.de/~nowozin/autopano-sift/
Ich bin übrigens Anfänger, wass PB anbelangt.
Besten Dank für eure Hilfe
Ich habe zwei Grafiken.
Von diesen beiden Grafiken möchte ich von einem Bereich (z.B. 50x50 Pixel) den prozentualen Unterschied berechnen, und dies viele male.
Das funktioniert auch:
Code: Alles auswählen
InitSprite()
Global *I1Buffer, I1pitch, *I2Buffer, I2pitch
UseJPEGImageDecoder()
LoadImage(1,"CIMG2059.jpg")
StartDrawing(ImageOutput(1))
*I1Buffer = DrawingBuffer()
I1Pitch = DrawingBufferPitch()
If Not *I1Buffer
End
EndIf
StopDrawing()
LoadImage(2,"CIMG2061.jpg")
StartDrawing(ImageOutput(2))
*I2Buffer = DrawingBuffer()
I2Pitch = DrawingBufferPitch()
If Not *I2Buffer
End
EndIf
StopDrawing()
Procedure.f CompareImages(x1.u,y1.u,x2.u,y2.u,sx.u,sy.u)
For x.u = 0 To sx-1
x3.u = (x + x1) * 3
x4.u = (x + x2) * 3
For y.u = 0 To sy-1
Pixel1 = PeekL(*I1Buffer+x3+(y+y1)*I1Pitch)
Pixel2 = PeekL(*I2Buffer+x4+(y+y2)*I2Pitch)
Indexer = Indexer+Abs(Red(Pixel1)-Red(Pixel2))+Abs(Green(Pixel1)-Green(Pixel2))+Abs(Blue(Pixel1)-Blue(Pixel2))
Next y
Next x
Indexer2.f = Round(Indexer/(sx*sy*155*3)*100000,#PB_Round_Nearest)/1000
ProcedureReturn Indexer2
EndProcedure
Procedure CompareThis(x1.u,y1.u,bx.u,by.u,sx1.u,sy1.u,sx2.u,sy2.u)
For x.u = sx1 To sx2
For y.u = sy1 To sy2
CompareImages(x1,y1,x,y,bx,by)
Next y
Next x
EndProcedure
t_start = ElapsedMilliseconds()
CompareThis(0,0,50,50,0,0,50,50)
laufzeit_jetzt = ElapsedMilliseconds() - t_start
Debug "das programm läuft seit " + Str(laufzeit_jetzt) + "ms"
EndDamit ich den Unterschied der beiden Sprites erhalte, müsste ich das eine vom anderen subtrahieren.
Dazu gibt es die funktion Sprite3DBlendingMode(Ausgangsmodus, Zielmodus).
Code: Alles auswählen
#D3DBLEND_ZERO = 1
#D3DBLEND_ONE = 2
#D3DBLEND_SRCCOLOR = 3
#D3DBLEND_INVSRCCOLOR = 4
#D3DBLEND_SRCALPHA = 5
#D3DBLEND_INVSRCALPHA = 6
#D3DBLEND_DESTALPHA = 7
#D3DBLEND_INVDESTALPHA = 8
#D3DBLEND_DESTCOLOR = 9
#D3DBLEND_INVDESTCOLOR = 10
#D3DBLEND_SRCALPHASAT = 11
#D3DBLEND_BOTHSRCALPHA = 12
#D3DBLEND_BOTHINVSRCALPHA = 13Oder ist es damit nicht möglich?
Welche Möglichkeiten habe ich sonst noch?
Mein Ziel ist es letztendlich eine Controlpoint Generator zu programmieren, ähnlich wie http://user.cs.tu-berlin.de/~nowozin/autopano-sift/
Ich bin übrigens Anfänger, wass PB anbelangt.
Besten Dank für eure Hilfe