.. .. .. ..   ..
BlitzBasic > Codearchiv > GrafikAktuallisiert 30.05.2009

..  Farben eines Bildes zählen - von Triton/Rallimen 
Dieser Code zählt die Farben, die in einem Bild vorkommen. Besonderen dank hier nochmal an Rallimen, der es enorm verschnellern konnte.

;** Minitool zum Farben-Zählen von Bildern 
;** 2004, by Triton 
;** überarbeitet von Rallimen 
Graphics 800,600,32,2 
bild = LoadImage("d:\ablage\bild.jpg") 

breite=ImageWidth(bild) 
hoehe=ImageHeight(bild) 
Dim farbe(breite * hoehe) 

timer1 = MilliSecs() 
SetBuffer ImageBuffer(bild) 
LockBuffer ImageBuffer(bild) 

For scanX = 0 To breite -1 
For scanY = 0 To hoehe -1 
farbe(z) = ReadPixelFast(scanX,scanY) 
z= z +1 
Next 
Next 
UnlockBuffer ImageBuffer(bild) 
quicksort(0,breite*hoehe) 
For z = 1 To breite * hoehe 
If Farbe (z -1) <> Farbe (z) Then farbenanzahl = farbenanzahl +1 
Next 
timer1 = MilliSecs() -timer1 
SetBuffer FrontBuffer() 
DrawBlock bild, 0,0 
Color 0,0,0 
Rect 0,0,300,30,1 
Color 255,255,255 

Text 0,0,"Dieses Bild enthält "+farbenanzahl+" Farben" 
Text 0,15,"Dieses Bild dauerte "+timer1 + " Millisek." 
WaitKey 
Cls 
For t= 0 To breite*hoehe 
DebugLog Farbe (t) 
Next 
End 

; Speedsort 
Function quicksort(l,r) 
Local p,q,h 
p=l : q=r 
x=Farbe((l+r)/2) 
Repeat 
While Farbe(p)q Then Exit 
;SWAP------------------ 

h=Farbe (q) 
Farbe (q)=Farbe (p) 
Farbe (p)=h 
;---------------------- 
p=p+1 
q=q-1 
If q<0 Then Exit 
Forever 
If l < q Then a=quicksort(l,q) 
If p < r Then a=quicksort(p,r) 
Return True 
End Function