Bildtiefe ändern

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

Beitrag von Thomas »

Sebastian hat geschrieben: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!
Ja, ich hab schon versucht, aus dem Pseudo-Code was zu machen, aber da werd ich nicht ganz schlau draus ...
kann mir keiner nen kleinen Beispielcode machen? Bitte :| :| :|
v6.00
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ganz ehrlich, das Betteln ist ein bischen abstoßend...

Zeig einfach mal was du bist jetzt zusammengeschraubt hast. Ich bin sicher dann werden dir einige helfen.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Ok, ok; ich habs ja schon geschnallt ...

Ich hätte da nur noch eine kleine Frage:
Als erstes (bevor ich das Floyd-Steinberg-Verfahren anwenden kann) muss ich doch meine Farbpalette von z.B. 1000 verschiedenen Farben auf 256 herunterbringen, oder?

(Ich hätte also erstmal alle Farben von dem Bild in ne Liste, oder ein Array geschrieben, und dann die Farben, die sich sehr ähnlich sind zusammengefasst. Würdet ihr es anders machen?)
v6.00
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Nein, Thomas. Du hast ganz Recht! Wir sind hier in einem Anfängerforum. Und du hast vollends Recht, wenn Dich die Antworten irritiert haben. Deine Frage wurde nämlich überhaupt nicht thematisiert. Das Floyd-Steinberg-Verfahren ist nämlich kein Algorithmus, der die Farbtiefe verringert, sondern ein sog. Dithering-Verfahren. Das bedeutet, dass Du mit einer geringeren Farbtiefe dennoch Bereiche wie Schattierungen darstellen kannst, ohne dass Du auf weitere Farben zurückgreifen musst. Letztendlich steckt Dein Problem also tatsächlich woanders, nämlich bei der Frage: Wie ist eine BMP-Datei überhaupt aufgebaut? Gibt es soetwas wie einen Kopf, indem festgelegt wird, wieviele Farben darzustellen sind und ob diese indiziert sind oder nicht usw. Und dann steht die Frage im Raum, wie Du auf diese Palette zugreifen kannst, ohne mit Point zu arbeiten und ob dies überhaupt möglich ist - und natürlich die Frage, wie Du einen evtl. nicht vorhanden Kopf in der Grafikdatei anlegen und in diesem verankern kannst, dass Du einen Index der Farben festlegen möchtest. All diese Fragen möchte ich gerne an das Forum zurückgeben, da ich mich hier nicht auskenne, aber ich denke, dass wir da ein wenig näher an Dein Problem herantreten.
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Um die Farbpalette auf 256 Einträge zusammenzuschrumpfen, fallen mir spontan 2 Ansätze ein:
1.) Du suchst einfach die 256 meistverwendeten Farben raus, und erstellst daraus deine neue Palette.
2.) Du erstellst aus den im Original-Bild verwendeten Farben ein Farbspektrum, und teilst dieses in 256 regelmäßige Abschnitte ein, denen du jeweils eine Farbe zuordnest.

Die 2. Methode erscheint mir besser, weil da eventuell wichtige Detailinformationen nicht so schnell verloren gehen wie bei der 1. Methode.

//EDIT: Eventuell könntest du es auch mit der Kontrastanalyse versuchen, die sollte einfacher umzusetzen sein...
http://de.wikipedia.org/wiki/Kontrastanalyse
Zuletzt geändert von hardfalcon am 07.12.2007 16:46, insgesamt 1-mal geändert.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Stimmt, du hast recht ...

Eigentlich wollte ich nur wissen, wie man die Anzahl der Farben am besten reduzieren kann...
(Die die nahe zusammen liegen GUT zusammenzufassen)

Und als dann das Floyd-Steinberg-Verfahren erwähnt wurde, hab ich den Faden verlohren :oops: ...
v6.00
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Bei meiner Internetrecherche habe ich festgestellt, dass Bitmap-Dateien tatsächlich einen Kopf besitzen, in welchem die entsprechenden Informationen abgelegt werden. Gibt es hier im Forum einen Profi, der schildern kann, wie auf diese Daten zuzugreifen und wie diese zu verändern sind? Wie werden Paletten angelegt, verändert und verarbeitet?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Bei Bilddateien (nicht nur Bitmap, sondern z.B. auch PNG) wird diese Variable Palette meines Wissens nur angelegt bei Bildern mit einer Farbtiefe von maximal 8 Bit. Bei höheren Farbtiefen wäre das reine Platzverschwendung, weil da sowieso nicht mit einer variablen, sondern mit einer fixen Palette gearbeitet wird.

//EDIT: Davon abgesehen wäre das sowieso keine empfehlenswerte Methode. Auch wenn eine Farbe in der Palette gespeichert ist, bedeutet das noch lange nicht, dass diese Farbe auch im Bild verwendet wird.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

hardfalcon hat geschrieben:Bei Bilddateien (nicht nur Bitmap, sondern z.B. auch PNG) wird diese Variable Palette meines Wissens nur angelegt bei Bildern mit einer Farbtiefe von maximal 8 Bit. Bei höheren Farbtiefen wäre das reine Platzverschwendung, weil da sowieso nicht mit einer variablen, sondern mit einer fixen Palette gearbeitet wird.

//EDIT: Davon abgesehen wäre das sowieso keine empfehlenswerte Methode. Auch wenn eine Farbe in der Palette gespeichert ist, bedeutet das noch lange nicht, dass diese Farbe auch im Bild verwendet wird.
Jep, da haste Recht (bei den Icons ist es genauso ...)
mein Icon-Creator 2.0 soll das halt unterstüzen, weil es auch Bilder mit nur 4Bit oder so gibt und da ist eine Palette von Vorteil ...
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Also, ich habs mir jezt so überlegt: :mrgreen:
ich hab ein Bild mit z.B. 5000 verschiedenen Farben.
Diese 5000 Farben möchte ich auf 256 Farben zusammenfassen.
Diese sollen aber nicht einfach gleichmäßig aufgeteil werden, sondern es sollen die Farben, die sich am Ähnlichsten sind zusammengefasst werden.

Wenn ich nun diese 5000 Farben in ein Array schreibe, wie finde ich die dann die 256 besten Farben heraus? :?
v6.00
Antworten