Farben zählen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

soli

Betreff: Farben zählen

BeitragMi, Okt 26, 2005 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Kennt jemand einen guten Algo um die Anzahl Farben eines
Bildes zu zählen?
solitaire
 

judos

BeitragMi, Okt 26, 2005 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
am besten du schreibst selber einen.

sollte eigentlich nicht sehr schwierig sein.

Wofür sollte das denn gut sein ?

mfg judos

Ctuchik

BeitragMi, Okt 26, 2005 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Prinzip wäre es natürlich leicht, aber wie speichert man ab welche Farben man schon hatte?
In einem Array mit 16 Millionen Feldern? Wohl kaum!
hab da jetzt noch nicht länger drüber nachgedacht, aber dass muss doch auch anders gehen, oder?
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Okt 26, 2005 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, geht auch anders und das auch sehr schnell!

-alle pixel in ein Array einlesen
-mit quicksort sortieren
- mit einfacher if Abfrage die die verschiedenen Farben zusammen zählen!

Die Function gabs auch schonmal hier im Forum!

EDIT:
habs gefunden
https://www.blitzforum.de/viewtopic.php?t=4525
[BB2D | BB3D | BB+]

Triton

BeitragMi, Okt 26, 2005 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab sowas mal geschrieben und irgendwo hier gepostet, Rallimen hatte es dann nochmal schneller gemacht:

Code: [AUSKLAPPEN]
;** Minitool zum Farben-Zählen von Bildern
;** 2004, by Triton
;** überarbeitet von Rallimen
Graphics 800,600,32,2
bild = LoadImage("d:\ablage\sweet.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)<x
p=p+1
Wend
While x<Farbe(q)
q=q-1
Wend
If 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



edit---
Mist, ich alter Mann bin zu langsam Sad Wink


Habs gleich nochmal ins Codearchiv gepostet.
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Ctuchik

BeitragMi, Okt 26, 2005 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah! Darauf wäre ich nie im Leben gekommen Very Happy
Wieder was dazugelernt, danke sehr!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

soli

BeitragDo, Okt 27, 2005 5:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!
Das ist ja wirklich höllisch schnell.
Nur läuft das auch korrekt?
Irfanview zeigt mir bei der vinca.jpg, die Windows beiliegt,
86604 Farben an. Mit dem Algo werden aber nur 5432 gezählt.

@judos
Ich hatte mich an der Variante die ctuchik vorgeschlagen hat versucht.
Was natürlich elend lahm war.
Ohne selbst probieren hätte ich kaum nachgefragt.
solitaire

soli

BeitragDo, Okt 27, 2005 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Uuuuuups war mein Fehler,
hatte nicht realisiert, das bei Blitz
auch bei nicht angezeigten Bildern der Desktopmode
(bei mir warens 16bit) benutzt wird, egal was man
im Programm selbst bei Graphics angibt.
Sad
solitaire

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group