Seite 1 von 4

Bildtiefe ändern

Verfasst: 03.12.2007 15:13
von Thomas
Hallo,
ich weiß zwar, dass ich diese Frage schon einmal gestellt habe ...

Ich möchte die Tiefe eines Bildes von 24bit auf 8bit konvertieren ...
Wichtig!: es ist egal welche Farben das sind (müssen nicht die 256 Standart-Farben sein), hauptsache das Bild besteht danach aus nurnoch 256 Farben

ich habe versucht, die gleiche Methode wie in diesem Code: http://www.purearea.net/pb/CodeArchiv/G ... Creator.pb zu verwenden, aber die bringt nicht gerade befriedigende Ergebnisse.
Wie konvertiert Gimp seine Bilder?

Hier ein Bild (einmal die Methode vom oben genannten Code und einmal mit Gimp):
Bild

Verfasst: 03.12.2007 16:38
von hardfalcon
Es gibt 3 Möglichkeiten:
1. die 256 Standardfarben
2. die 256 "besten" Farben anstatt der Standardpalette nehmen
3. Dithering (z.B. Floyd-Steinberg-Verfahren)

mehr weiss ich leider auch nicht... :|

//Edit: hier is das Steinberg-Verfahren gut erklärt (mit Pseudocode):
http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering

Verfasst: 03.12.2007 18:29
von Fluid Byte
Warum benutzt du nicht CreateImage()?

Code: Alles auswählen

CreateImage(0,640,480,24)

hdc = StartDrawing(ImageOutput(0))
BitBlt_(hdc,0,0,640,480,GetDC_(0),0,0,#SRCCOPY)
StopDrawing()

CreateImage(1,640,480,8)
hdc = StartDrawing(ImageOutput(1))
DrawImage(ImageID(0),0,0)
StopDrawing()

OpenWindow(0,0,0,640,480,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,0,0,ImageID(1))

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend

Verfasst: 03.12.2007 19:21
von Thomas
Fluid Byte hat geschrieben:Warum benutzt du nicht CreateImage()?
Hab ich auch schon versucht, aber das sieht grauenhaft aus. Ich glauben PB verwendet die 256 Standart-Farben. Probiers mal mit den Farbtiefen 1bit, 4bit, (8bit, 24bit) dann weißt du was ich meine ...

Verfasst: 03.12.2007 20:01
von Fluid Byte
Thomas hat geschrieben:Wichtig!: es ist egal welche Farben das sind

Verfasst: 04.12.2007 15:48
von Thomas
Hat sonst keiner mehr Ideen, oder nen Beispielcode?

Verfasst: 04.12.2007 16:17
von Kaeru Gaman
hast du HFs antwort übersehen?

> Wie konvertiert Gimp seine Bilder?
wahrscheinlich auch nach Floyd-Steinberg, wie Irfanview.

das Floyd-Steinberg dithering ist das beste verfahren für sowas,
und du kannst doch PB,
also solltest du aus nem Wiki-Pseudocode auch einen PB-code machen können....


wenn du nicht dithern willst, sondern nur pixelweise ersetzen,
dann benutz halt die standard-palette, und geh die mit ner schleife durch,
um zu ermitteln, welche der palettenfarbe am wenigsten abweichung zur aktuellen pixelfarbe hat.

du könntest dir latürnich auch ne referenztabelle anlegen,
aber dann wäre 256³ schon etwas happig, da würde ich dann doch eher auf 32³ (15bit farben) beschränken.

west wie'sch menn?

Verfasst: 04.12.2007 17:35
von Thomas
Kaeru Gaman hat geschrieben:hast du HFs antwort übersehen?

> Wie konvertiert Gimp seine Bilder?
wahrscheinlich auch nach Floyd-Steinberg, wie Irfanview.

das Floyd-Steinberg dithering ist das beste verfahren für sowas,
und du kannst doch PB,
also solltest du aus nem Wiki-Pseudocode auch einen PB-code machen können....
ja, ich hab die antwort von HF gelesen und auch das Floyd-Steinberg-Verfahren in Wiki ...
Aber sry, ich kann mit dem Pseudecode an einigen stellen nix anfangen :oops: .
Kann mir bitte jemand einen beispielcode progen, wenn's angeblich so einfach ist? :|

Verfasst: 06.12.2007 07:36
von Thomas
Hat keiner mehr Ideen? :cry:

Verfasst: 06.12.2007 10:38
von Sebastian
Ich habe mich mal über versch. Algorithmen schlau gemacht. Floyd-Steinberg scheint wirklich der am besten geeignete zu sein. Ich denke daher auch, dass Du diesen Algorithmus verwenden solltest!