Da stellt sich die Frage, was ist zuerst, das Huhn oder das Ei.
Normalerweise ist erst ein Bild mit sehr vielen Farben da, und dann ist da einer, dem nimmt das dann zuviel Speicherplatz weg, also muss die Anzahl der Farben reduziert werden. Also wird man gucken, welche Farben am seltensten vorkommen und die dann durch aehnliche ersetzen oder so in der Art. Dabei faellt dann irgendwann eine Tabelle raus...
Irgend ein schlauer Mensch muß ja die Tabelle geschaffen haben. Und ich
gehe mal davon aus, daß sie logisch aufgebaut ist.
Naja, was ist schon am Nichtvorhandensein von Magenta logisch?
Normalerweise ist erst ein Bild mit sehr vielen Farben da
Das geht doch auch anders herum. Ich möchte ein Bild erzeugen und dafür die richtige Tabelle schreiben. Also muß ich wissen welchen Index ich zuweisen muß.
Kann mir jemand sagen, welche Systematik dahintersteckt?
Dann schaue Dir die Spezifikation des Speicherformats dieser konkreten Bilddatei an. das sollte sich ja in der endung der Datei widerspiegeln, oder an den ersten paar Bytes im File.
Dann schaue Dir die Spezifikation des Speicherformats dieser konkreten
Bilddatei an.
Wir reden aneinander vorbei! Ich habe versucht zu erklären, daß es noch keine Bilddatei gibt, da ich sie erst schaffen will. Welchen Indexwert schreibe ich dann also rein, wenn ich eine bestimmte Farbe sehen will?
Die Tabelle erzeugst du anhand
der Farben, die du benötigst
Und wie mache ich das? Nur 1, 2, 3, 4, 5, ... funktioniert nicht!
Ach was? Weißt du überhaupt, was eine Farbtabelle ist? Wenn nein, lies mal was über das olle BMP-Format, dort gibt es auch einen Modus mit Farbtabelle. Diese ist am Ende nur eine Liste mit RGB Einträgen, je nach Format 16, 24, oder 32 Bit Pro Eintrag.
Hier mit 24 Bit
R G B
0xFFFFFF wäre weiß, Eintrag Nr. 0
0x000000 schwarz, Eintrag Nr. 1
Vielleicht waere langsam mal ein guter Zeitpunkt fuer mehr Kontext, also so Belanglosigkeiten wie: Wo kommt diese Tabelle her und wo soll das Bild hin, oder so?
Aber was weiss ich schon...
Da es sich hierbei aber nur um einen Test handelt, hilft das nicht
weiter!
Die Frage bleibt: Wie komme ich an den richtigen Indexwert für eine
bestimmte Farbe ohne jedesmal erst ein entsprechendes Bild zu
analysieren?
Indem Du in Deiner Tabelle nach dem Bit- und Bytewert der Farbe suchst, und dann den Index ermittelst. Aber vermutlich habe ich Dich wieder falsch verstanden. Es ist ohnehin unklar, wie Du eine bestimmte Farbe überhaupt ansprechen/referenzieren willst, um danach in der Tabelle suchen zu können.
Wozu muß man das eigentlich wissen? Ist es nicht eigentlich andersherum, daß man die Paarung einfach selbst festlegt, und das Programm, was dann damit was anfangen soll, sucht dann nur anhand des Indexes nach dem Farbwert, der dann praktisch der API für die Anzeige übergeben wird? Dazu muß natürlich das Format des Farbwerts gewissen Formatregeln entsprechen, damit die API das auch richtig verwursten kann.
Ich habe versucht zu erklären, daß es noch
keine Bilddatei gibt, da ich sie erst schaffen will. Welchen Indexwert
schreibe ich dann also rein, wenn ich eine bestimmte Farbe sehen will?
Frag deinen Monitor/Bildschirm resp. die Videokarte oder deren DAC.
Ich habe versucht zu erklären, daß es noch
keine Bilddatei gibt, da ich sie erst schaffen will. Welchen Indexwert
schreibe ich dann also rein, wenn ich eine bestimmte Farbe sehen will?
Aha.
Den, den der Leser des Dateiformats sehen will, der sich an irgendeine Dateiformatbeschreibung halten wird.
Indem Du in Deiner Tabelle nach dem Bit- und Bytewert der Farbe suchst,
und dann den Index ermittelst.
Den Bit- und Bytewert zu suchen ist natürlich kein Problem, aber wie finde ich den entsprechenden Indexwert. In der Farbtabelle ist er ja nicht vermerkt. Daher hatte ich ja ganz am Anfang gefragt wie diese Logik aussieht, denn eine gewisse Logik muß es dabei ja geben. Ich kenne sie nur nicht. Die Werte aus einer fertigen Bilddatei auszulesen ist natürlich kein Problem, aber die Bilddatei will ich erst schaffen und dazu brauche ich die passenden Indexwerte.
Den Bit- und Bytewert zu suchen ist natürlich kein Problem, aber wie
finde ich den entsprechenden Indexwert. In der Farbtabelle ist er ja
nicht vermerkt.
Doch, indirekt. Es ist die Position (Index).
Daher hatte ich ja ganz am Anfang gefragt wie diese
Logik aussieht, denn eine gewisse Logik muß es dabei ja geben.
Hab ich das nicht dargestellt? Der erste Eintrag der Tabelle hat Index Null, der nächste 1 etc. Wie bei jedem normalen Array in praktisch jeder Programmiersprache incl. BASIC!
Ich kenne
sie nur nicht. Die Werte aus einer fertigen Bilddatei auszulesen ist
natürlich kein Problem, aber die Bilddatei will ich erst schaffen und
dazu brauche ich die passenden Indexwerte.
Welche Drogen nimmst du, daß du aus so einer einfachen Sache so ein Theater machst?
Hab ich das nicht dargestellt? Der erste Eintrag der Tabelle hat Index
Null, der nächste 1 etc.
Das stimmt eben nicht, wie ich am obigen Testbeispiel gezeigt habe.
Wovon redest du bitte? Der erste Eintrag in einem Array hat immer den Index Null. Welche Farbe dort drin steht, ist eine ganz andere Frage! Dein tolle Testbild hat 16 Farben und, suprpise, surpise, eine Frabtabelle mit 16 Einträgen.
Siehe Anhang. Eintrag #0 ist schwarz (naja, fast 1,1,1) gefolgt von grün, türkis, blau, rot gelb, weiß schwarz, dann noch 8x schwarz. Damit hast du deine Farben und Indizes!
Woher kommt die verflixte Testdatei denn?
(Und woher kommt die merkwürdige Zuordnung nach Farben? Das ist genau andersherum als der RGB-Farbraum. FFFFFF ist weiss.)
Normalerweise ist der Offset bekannt, wo die Colormap beginnt.
Hab ich das nicht dargestellt? Der erste Eintrag der Tabelle hat Index
Null, der nächste 1 etc.
Das stimmt eben nicht, wie ich am obigen Testbeispiel gezeigt habe.
Welche Farbe auf welchem Index steht, entscheidet doch der Designer der zukünftigen Tabelle bzw. Bilddatei. Da muß nicht jeder Index belegt sein, der dann natürlich auch nicht benutzt werden darf (bzw. sollte, wenn was sinnvolles dabei rauskommen soll).
Dein tolle Testbild hat 16 Farben und, suprpise, surpise, eine
Frabtabelle mit 16 Einträgen.
Mein Bild hat nur 7 Farben, deshalb sind die übrigen 9 Einträge in der Farbtabelle 0x00.
Ich habe im Beispiel auch die Indexwerte aufgeführt und die gehen von 0x00 bis 0x66 u.z. nicht in der Reihenfolge der Indexwerte, sondern in der Reihenfolge der verwendeten Farben.
Dein tolle Testbild hat 16 Farben und, suprpise, surpise, eine
Frabtabelle mit 16 Einträgen.
Mein Bild hat nur 7 Farben, deshalb sind die übrigen 9 Einträge in der
Farbtabelle 0x00.
Ich habe im Beispiel auch die Indexwerte aufgeführt und die gehen von
0x00 bis 0x66 u.z. nicht in der Reihenfolge der Indexwerte, sondern in
der Reihenfolge der verwendeten Farben.
Wer lesen kann ist klar im Vorteil!
Bei deinem wirren GEschreibsel? Ein Bild mit 4bpp (4 Bit per pixel) kann maximal 16 Farben enthalten und damit maximal einen Index von 0x0 bis 0xF. Zweistellige Hexadezimalzalen sind nicht möglich, das wäre ein 8 Bit Bild.
Ein Bild mit 4bpp (4 Bit per pixel) kann
maximal 16 Farben enthalten und damit maximal einen Index von 0x0 bis
0xF. Zweistellige Hexadezimalzalen sind nicht möglich, das wäre ein 8
Bit Bild.
OK! Da Fakten anscheinend nicht akzeptiert werden, hat es keinen Sinn mehr weiter zu kommunizieren!
Normalerweise ist der Offset bekannt, wo die Colormap beginnt.
Nicht unbedingt bekannt im Sinne von "an vordefinierter Position".
Auf jeden Fall ist die Position aber ermittelbar. Man muss halt die Struktur(en) der Datei durchhecheln um die Position der Farbtabelle zu finden. Dabei ergbt sich dann nebenbei auch oft noch die Information, ob es überhaupt eine Farbtabelle gibt und, falls ja, wie viele Einträge sie hat.
Aber das war eigentlich gar nicht die Frage, die war nach dem Index innerhalb der Farbtabelle und der steht tatsächlich nirgendwo explizit sondern nur implizit. Es ist halt einfach die Nummer des Eintrags in der Tabelle.
Aber eigentlich braucht man den auch niemals suchen. Wenn man selber ein Bild erstellt, kann man ja auch die Farbtabelle für das Bild selber erstellen und weiß dann natürlich, an welche Position in der Tabelle man welchen Farbeintrag geschrieben hat.