Bildtiefe ändern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Bildtiefe ändern

Beitrag 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
v6.00
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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 ...
v6.00
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Thomas hat geschrieben:Wichtig!: es ist egal welche Farben das sind
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Hat sonst keiner mehr Ideen, oder nen Beispielcode?
v6.00
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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? :|
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Hat keiner mehr Ideen? :cry:
v6.00
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag 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!
(Win 11 64-bit, PB 6.04 und 6.10)
Antworten