Seite 2 von 4

Verfasst: 06.12.2007 16:29
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 :| :| :|

Verfasst: 06.12.2007 16:57
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.

Verfasst: 06.12.2007 18:01
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?)

Verfasst: 07.12.2007 16:01
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.

Verfasst: 07.12.2007 16:42
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

Verfasst: 07.12.2007 16:43
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: ...

Verfasst: 07.12.2007 19:06
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?

Verfasst: 07.12.2007 19:11
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.

Verfasst: 07.12.2007 20:32
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 ...

Verfasst: 08.12.2007 08:09
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? :?