Farbanzahl ermitteln...
Übersicht

wherewolfBetreff: Farbanzahl ermitteln... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute
Ich arbeite im Moment an einem kleinen Bildspeicherprogramm. Seit ich es von BlitzBasic auf BlitzMax rübergecodet habe, werden viel mehr Farben gespeichert als eigentlich vorhanden sind. Bei einem Bild mit nur 3 Farben werden über 100 angezeigt etc. Wenn ihr zb diese Grafik: http://www.wintonet.de/grafik.gif mal (als bmp) öffnet oder ein anderes Bild mit sehr wenigen Farben, seht ihr was ich meine. Findet ihr vielleicht den Fehler in meinem Code? Gruss wolf Code: [AUSKLAPPEN] 'farbzähler Graphics 800,600,0,60 img_name_open$=GInput$("Name des Bildes: (mit Endung) ") img=LoadPixmap(img_name_open$) Cls DrawPixmap img,0,0 Flip WaitKey() Type TFarbe Field rgb EndType Local farb_list:TList=CreateList() '----------------------------------------------------------------------------------------------------------- 'Hier beginnt der Teil, welcher die Farbanzahl herausfinden soll For y=0 To PixmapHeight(img)-1 For x=0 To PixmapWidth(img)-1 Local gefunden=0 current_rgb=ReadPixel(img,x,y) For f:TFarbe=EachIn farb_list If current_rgb=f.rgb Then gefunden=1 ; Exit Next If gefunden=0 Then Local nf:TFarbe nf=New TFarbe nf.rgb=current_rgb farb_list.addlast(nf) Cls; DrawText farb_list.count(),0,0 ; Flip EndIf Next Next WaitKey() '----------------------------------------------------------------------------------------------------------- Function GInput$(text$,x=0,y=0) 'Ersetzt die Input-Funktion im grafischen Fenster. Wenn für x und y keine Werte übergeben wurden 'werden sie auf 0 gesetzt. Liefert -1 zurück wenn sie abgebrochen wurde. FlushKeys() Type TChar Field zeichen$ End Type Local char_list:TList=CreateList() While Not KeyHit(Key_enter) If KeyHit(key_escape) Then text$="-1" ; Exit 'Textausgaben DrawText text$,x,y Local zaehler=0 For c:TChar=EachIn char_list DrawText c.zeichen$,x+TextWidth(text$)+zaehler,y zaehler=zaehler+TextWidth(c.zeichen$) Next 'Eingabeänderungen current_char=GetChar() If Not current_char=0 Then 'eine Taste wurde gedrückt If current_char=8 And Not char_list.Count()=0 Then 'die rücktaste wurde gedrückt, lösche ein zeichen char_list.removelast() Else Local NewChar:TChar NewChar=New TChar NewChar.zeichen$=Chr(current_char) ListAddLast char_list,NewChar EndIf EndIf Flip;Cls Wend 'der eingegebene Text wird zurückgegeben und die liste gelöscht Local text_return$="" For c:TChar=EachIn char_list text_return$=text_return$+c.zeichen$ Next char_list.clear() FlushKeys() Return text_return$ End Function (vereinfacht, sollte nur die Anzahl der Farben bestimmen) |
||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Soviel wie ich weiss, kann man keine GIF's laden. Wandle es in PNG um, bloss nicht in JPG !!!
Und noch eine kleine Hilfe: Statt per Input das Verzeichnis und so anzugeben, Zitat: img_name_open$=GInput$("Name des Bildes: (mit Endung) ")
kannst du per Requestfile dich bequem durchs Verzeichnis durchklicken: Zitat: Local img_name_open:String = RequestFile("Welches Bild?")
|
||
![]() |
Suco-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jedes Grafikprogramm wird dir bestätigen, dass deine Grafik oben mehr als 3 Farben hat. Das liegt daran, dass gif durch seine 256 Farben deine Grafiken genauso zerstört wie das jpg Format. Wenn du ein korrektes Ergebnis willst, erstelle eine Grafik und benutze nur das bmp oder png Format. Einmal nach gif oder jpg rüber und wieder zurückkonvertieren ist auch nicht, die beiden Formate zerstören die Grafik für immer.
Habe deinen Code mit einer von mir erstellten Grafik getestet, funktioniert ohne Probleme. Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Cardonic |
![]() Antworten mit Zitat ![]() |
---|---|---|
In diesem Fall ist es nicht so, dass die Graphik durch das Gif-Format zerstört wird.
Gif unterstützt schon nur bis 256 Farben; aber es werden _niemals_ aus wenig Farben mehr. Wenn man genau hinschaut ist zwischen den verschiedenen Farben ein Antialiasing; daher die vielen Farben. mfg Cardonic |
||
wherewolf |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke sehr! Mit .bmp Files funktioniert es einwandfrei. In der fortgeschritteneren Version mit BB hat es allerdings auch für .jpgs geklappt. Ich teste gerade, ob das mit einer "qualitätsfunktion" zusammenhängt, welche ich in BM noch nicht drin hab. Könnte sein das dort die .jpg-Bilder in ein "gutes" Format umgewandelt werden, so als günstiger Nebeneffekt. Vielen Dank noch mal.
@rema: Danke noch für den zweiten Tipp. Wenn es das ist was ich denke, hab ich das bei BB mühsam selbst programmiert. Naja, kleiner Lerneffekt ![]() |
||
wherewolf |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@rema: Ne, scheint doch nicht ganz das zu sein. Ich verwende GInput() weil die Input-Funktion nur in der Konsolenansicht erscheint. (oder kann man das auch ändern?) Da habe ich mit RequestFile() das gleiche Problem. Und ich progge dann glaub lieber grad ne nette Fensterstruktur für das Dateimenü (wie in BB)
gruss wolf |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte keine Doublepostings, sonst werd ich schliessen.
Der Editbutton ist oben rechts , benutz den bitte. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Beispielbild da oben hat 67 Farben. Vergrößere dir mal die Kante eines
Buchstabens, da sieht man gut die Kantenglättung und das Dithering bei den Farbflächen. Im bb-Codearchiv habe ich auch mal was entsprechendes gepostet: https://www.blitzforum.de/foru...hp?t=14584 |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group