fb:porticula NoPaste
POINT-Ersatz (mit Pitch)
Uploader: | Volta |
Datum/Zeit: | 22.08.2011 18:03:50 |
Screen 18, 32
Dim As Double lastTime, ersteZeit, zweiteZeit, dritteZeit
Dim As ULongInt counter1, counter2, counter3
Dim As Integer x, y, z = 490
Dim As Any Ptr bild = ImageCreate(z, z,&hFF000000)
Dim As Integer breit = Cast(Integer Ptr,bild)[2]
Dim As Integer hoch = Cast(Integer Ptr,bild)[3]
Dim As Integer Pitch = Cast(Integer Ptr,bild)[4]\4
lastTime = Timer
For y = 0 To hoch-1
For x = 0 To breit-1
If Point(x, y, bild) = &hFF000000 Then
counter1 += 1
EndIf
Next
Next
ersteZeit = Timer - lastTime
lastTime = Timer
Dim As Integer Ptr j = Cast(Integer ptr, bild+32) 'Startadresse
For x = 1 To hoch
For y = 0 To breit-1
If j[y] = &hFF000000 Then
counter2 += 1
EndIf
Next
j+=Pitch
Next
zweiteZeit = Timer - lastTime
lastTime = Timer
counter3=0
y = Cast(Integer,bild)+32 'Startadresse
For x = 1 To hoch 'Anzahl Zeilen
Asm
mov ebx, dword Ptr [breit] 'Anzahl Zeilenpixel
mov edx, dword Ptr [y] 'Startadresse
Xor ecx, ecx 'Zähler=0
LLoop1:
mov eax, [edx] 'Farbpixel holen
And eax, &hffffff 'nur RGB
jnz LLoop2 'nicht 0, dann nicht zählen
inc ecx '+=1 Pixel schwarz
LLoop2:
Add edx, 4 '+=4 Adresse
dec ebx '-=1 Pixel
jnz LLoop1
Add dword Ptr [counter3], ecx
End Asm
y +=pitch 'neue Adresse
Next
dritteZeit = Timer - lastTime
Print "point() :", ersteZeit
Print "Pointer :", zweiteZeit;" ";Fix(ersteZeit/ zweiteZeit);" x schneller!"
Print "Inlineas:", dritteZeit;" ";Fix(ersteZeit/ DritteZeit);" x schneller!"
Print
Print "Erstes Ergebnis:", counter1
Print "Zweites Ergebnis:", counter2
Print "Drittes Ergebnis:", counter3
ImageDestroy (bild)
Sleep