funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 12.03.2010, 18:34 Titel: Farbabfrage beschleunigen. |
|
|
Wie kann ich die Farbabfrage noch beschleunigen?
Hiermit lege ich die 2 Bilder (100X100 Pixel) vom Irrlichtfenster in eine Image:
Code: |
Sub mScreenshot ()
glReadPixels(xhi,600-yhi-xw,xw,yw, GL_BGRA, GL_UNSIGNED_BYTE, DataPointer)
FreeImage_FlipVertical(bitmap)
mmxcopy hdnviereck +32, DataPointer,xw*yw*4
glReadPixels(xhi1,600-yhi1-xw,xw,yw, GL_BGRA, GL_UNSIGNED_BYTE, DataPointer)
FreeImage_FlipVertical(bitmap)
mmxcopy hdnviereck1 +32, DataPointer,xw*yw*4
End Sub
|
Es gehen damit nur Bytepointer, sonst werden die Farben nicht richtig erkannt :
Dim Shared As UByte Ptr bitmap,DataPointer
Darum habe ich mal dieses zur Abfrage benutzt, was eigentlich schon schnell ist:
Code: |
Sub rectcollisionspruefung()
For yz=0 To yw-1
For xz=0 To xw-1
red=PEEK(UBYTE,hdnviereck+32+(xz*4)+(yz*pitch)+2)
green=PEEK(UBYTE,hdnviereck+32+(xz*4)+(yz*pitch)+1)
blue=PEEK(UBYTE,hdnviereck+32+(xz*4)+(yz*pitch)+0)
If red=255 Or green=255 or blue=255 Then
zz=zz+1
Locate 20,2
Print zz
Exit Sub
EndIf
Next
Next
For yz=0 To yw-1
For xz=0 To xw-1
red=PEEK(UBYTE,hdnviereck1+32+(xz*4)+(yz*pitch)+2)
green=PEEK(UBYTE,hdnviereck1+32+(xz*4)+(yz*pitch)+1)
blue=PEEK(UBYTE,hdnviereck1+32+(xz*4)+(yz*pitch)+0)
If red=255 Or green=255 or blue=255 Then
zz=zz+1
Locate 20,2
Print zz
Exit Sub
EndIf
Next
Next
End Sub
|
Damit habe ich es auch probiert:
Code: |
TYPE pixelmap
blue AS UBYTE
green AS UBYTE
red AS UBYTE
allpha AS UBYTE
END TYPE
|
Wie könnte ich die Abfrage weiterhin beschleunigen?
Gruss |
|