Hallo, Farbbilder werden ja häufig mit Hilfe von Farbtabellen dargestellt, wobei die entsprechende Farbe als Index gespeichert wird. Wie kann ich nun herausfinden welche Farbe welchen Index hat. Durch Tests habe ich fogende Indexwerte bei einem Bild mit 4bpp herausgefunden: schwarz, 0x00 gelb, 0x11 cyan, 0x22 rot, 0x33 grün, 0x44 blau, 0x55 weiß, 0x66 Kann mir jemand sagen, welche Systematik dahintersteckt?
Moin, Bruno M. schrieb: > Wie kann ich nun herausfinden welche Farbe welchen Index hat. Mittels der richtigen Farbtabelle. Waere da eine Systematik dahinter, braeuchte man ja keine Tabelle. Gruss WK
:
Bearbeitet durch User
Dergute W. schrieb: > Waere da eine Systematik dahinter, braeuchte man ja keine Tabelle. Da stellt sich die Frage, was ist zuerst, das Huhn oder das Ei. Irgend ein schlauer Mensch muß ja die Tabelle geschaffen haben. Und ich gehe mal davon aus, daß sie logisch aufgebaut ist.
Moin, Bruno M. schrieb: > 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? Gruss WK
Dergute W. schrieb: > 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ß.
Bruno M. schrieb: > 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.
Bruno M. schrieb: > Durch Tests habe ich fogende Indexwerte bei einem Bild mit 4bpp > herausgefunden: > > schwarz, 0x00 > gelb, 0x11 > cyan, 0x22 > rot, 0x33 > grün, 0x44 > blau, 0x55 > weiß, 0x66 > > Kann mir jemand sagen, welche Systematik dahintersteckt? Bei 4bpp eher
1 | schwarz, 0 |
2 | gelb, 1 |
3 | cyan, 2 |
4 | rot, 3 |
5 | grün, 4 |
6 | blau, 5 |
7 | weiß, 6 |
Das spricht nicht für direkte Farbwerte, das wäre eher
1 | schwarz 0, |
2 | dunkelrot 1, |
3 | dunkelgrün 2, |
4 | braun 3, |
5 | dunkelblau 4, |
6 | ... |
7 | hellrot 9, |
8 | hellgrün 10, |
9 | cyan 12, |
10 | weiss 15. |
sondern für eine Palette, die dann in der Datei mit gespeichert ist. Schau halt einfach welches Dateiformat und wie es aufgebaut ist.
Jens G. schrieb: > 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?
Michael B. schrieb: > Bei 4bpp eherschwarz, 0 > gelb, 1 > cyan, 2 > rot, 3 > grün, 4 > blau, 5 > weiß, 6 Die Werte die ich durch Tests herausgefunden habe, habe ich natürlich ausgelesen und daher stimmen sie auch.
Bruno M. schrieb: > Welchen Indexwert schreibe ich dann also rein, wenn ich eine bestimmte > Farbe sehen will? Die des entsprechenden Tabelleneintrags. Die Tabelle erzeugst du anhand der Farben, die du benötigst
Bruno M. schrieb: > Welchen Indexwert > schreibe ich dann also rein, wenn ich eine bestimmte Farbe sehen will? Du willst ein Bild komprimieren, und eines der einfachsten Mittel ist indizierte Farben. (Das zweite danach wird dann wohl Lauflängenkodierung sein.) Schritt 1: Häufigkeitsanalyse Schritt 2: (reduzierte) Farbtabelle erzeugen Schritt 3: Ursprungsfarbe durch Farbe in Farbtabelle ersetzen Schritt 4: Bild auf indizierte Darstellung verkleinern
Rainer W. schrieb: > Die Tabelle erzeugst du anhand > der Farben, die du benötigst Und wie mache ich das? Nur 1, 2, 3, 4, 5, ... funktioniert nicht!
Bruno M. schrieb: >> 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 etc.
Falk B. schrieb: > Ach was? Weißt du überhaupt, was eine Farbtabelle ist Falk, immer die Freundlichkeit in Person! g_LUT4Bpp: .db 0x01, 0x01, 0x01, 0 ; weiß, 0x66 .db 0x01, 0xFF, 0x01, 0 ; grün, 0x44 .db 0xFF, 0xFF, 0x01, 0 ; gelb, 0x11 .db 0xFF, 0x01, 0x01, 0 ; rot, 0x33 .db 0x01, 0x01, 0xFF, 0 ; blau, 0x55 .db 0x01, 0xFF, 0xFF, 0 ; cyan, 0x22 .db 0xFF, 0xFF, 0xFF, 0 ; schwarz, 0x00 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 .db 0x00, 0x00, 0x00, 0 das ist die Farbtabelle und dahinter habe ich den entsprechenden Indexwert (also das was in der Bilddatei steht) eingetragen.
Moin, 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... Gruss WK
Das ist das Bild von dem die Tabelle stammt. 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?
Bruno M. schrieb: > Wie komme ich an den richtigen Indexwert für eine bestimmte Farbe ohne > jedesmal erst ein entsprechendes Bild zu analysieren? Indem du in der Farbtabelle den Eintrag suchst, dessen RGB Werte der gesuchten Farbe entsprechen.
Monk schrieb: > Indem du in der Farbtabelle den Eintrag suchst, dessen RGB Werte der > gesuchten Farbe entsprechen. Für ein Bild, das ich schaffen will, gibt es eben noch keine Farbtabelle.
Bruno M. schrieb: > Für ein Bild, das ich schaffen will, gibt es eben noch keine > Farbtabelle. Dann erstelle eine!
Walter T. schrieb: > Die Farben sehen übrigens verdächtig nach den alten CGA-Farben aus. Das Bild wurde mit Hilfe der Windows Farbtabelle erzeugt.
Monk schrieb: > Dann erstelle eine! Wenn du mir jetzt noch sagst, wie ich das machen soll, wäre das super!
Bruno M. schrieb: > Das ist das Bild von dem die Tabelle stammt. > > 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.
Bruno M. schrieb: > Wir reden aneinander vorbei! Offenkundig. > 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. Bruno M. schrieb: > Die Werte die ich durch Tests herausgefunden habe, habe ich natürlich > ausgelesen und daher stimmen sie auch. Spinner. Du hast nicht mal begriffen, dass 4bpp 4 bit pro pixel heisst und deine 8 bit Werte 2 Pixel enthalten, also 2 Werte. Fällt bei deinem ungeschickten Testbild natürlich nicht gleich auf. Lies halt wie man Bilddateien irgendwelcher Formate speichert, z.B. BMP oder GIF, und speichere das so
Jens G. schrieb: > 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.
Bruno M. schrieb: > 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?
Falk B. schrieb: > 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.
Bruno M. schrieb: >> 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.
:
Bearbeitet durch User
Bruno M. schrieb: > Falk B. schrieb: >> 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).
:
Bearbeitet durch User
Walter T. schrieb: > Woher kommt die verflixte Testdatei denn? Was soll denn daran verflixt sein? > (Und woher kommt die merkwürdige Zuordnung nach Farben? Das ist genau > andersherum als der RGB-Farbraum. Wovon redest du? > Normalerweise ist der Offset bekannt, wo die Colormap beginnt. Sicher, da sagt dir das Dateiformat. Aber der OP irrt ganz wanders rum. Ich weiß nicht, was sein Problem ist, aber er hat eins!
Bruno M. schrieb:
1 | > g_LUT4Bpp: |
2 | > .db 0x01, 0x01, 0x01, 0 ; weiß, 0x66 -> Dunkelgrau |
3 | > .db 0x01, 0xFF, 0x01, 0 ; grün, 0x44 -> Grün |
4 | > .db 0xFF, 0xFF, 0x01, 0 ; gelb, 0x11 -> Gelb |
5 | > .db 0xFF, 0x01, 0x01, 0 ; rot, 0x33 -> Rot |
6 | > .db 0x01, 0x01, 0xFF, 0 ; blau, 0x55 -> Blau |
7 | > .db 0x01, 0xFF, 0xFF, 0 ; cyan, 0x22 -> Cyan |
8 | > .db 0xFF, 0xFF, 0xFF, 0 ; schwarz, 0x00 -> Weiss |
9 | > .db 0x00, 0x00, 0x00, 0 -> schwarz |
10 | > .db 0x00, 0x00, 0x00, 0 |
11 | > .db 0x00, 0x00, 0x00, 0 |
12 | > .db 0x00, 0x00, 0x00, 0 |
13 | > .db 0x00, 0x00, 0x00, 0 |
14 | > .db 0x00, 0x00, 0x00, 0 |
15 | > .db 0x00, 0x00, 0x00, 0 |
16 | > .db 0x00, 0x00, 0x00, 0 |
17 | > .db 0x00, 0x00, 0x00, 0 |
Wenn das RGB ist.
Falk B. schrieb: > 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!
Bruno M. schrieb: > Falk B. schrieb: >> 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.
Falk B. schrieb: > 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!
Ah, ich verstehe. Es geht um die BMP-Datei. Ein Nibble ist ein Pixel. Mehr steckt nicht dahinter, da unkomprimiert.
Walter T. schrieb: > 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.
Es geht tatsächlich um die angehängte BMP-Datei. Es ist eine unkomprimierte BMP mit 16 Bit Colormap. 0x66 heißt einfach 2 schwarze Pixel nebeneinander, 0x22 2x Cyan nebeneinander usw.
:
Bearbeitet durch User
Bruno M. schrieb: > OK! Da Fakten anscheinend nicht akzeptiert werden, hat es keinen Sinn > mehr weiter zu kommunizieren! Für jemanden der offensichtlich nicht weiß was er redet bist du ganz schön laut! Bruno M. schrieb: > g_LUT4Bpp: > .db 0x01, 0x01, 0x01, 0 ; weiß, 0x66 > .db 0x01, 0xFF, 0x01, 0 ; grün, 0x44 > .db 0xFF, 0xFF, 0x01, 0 ; gelb, 0x11 > .db 0xFF, 0x01, 0x01, 0 ; rot, 0x33 > .db 0x01, 0x01, 0xFF, 0 ; blau, 0x55 > .db 0x01, 0xFF, 0xFF, 0 ; cyan, 0x22 > .db 0xFF, 0xFF, 0xFF, 0 ; schwarz, 0x00 Das was du als ›weiß,0x66‹ annimmst, sind in Wirklichkeit zwei nebeneinander liegende gleichfarbige 4Bit Pixel die beide einen Index 6 haben. Vielleicht versuchst du dich selbst weniger zu verwirren.
:
Bearbeitet durch User
Norbert schrieb: > Das was du als ›weiß,0x66‹ annimmst, sind in Wirklichkeit zwei > nebeneinander liegende gleichfarbige 4Bit Pixel die beide einen Index 6 > haben. Darauf muß man erst mal kommen! Es tut richtig gut mal ne vernünftige Erklärung zu bekommen!
Bruno M. schrieb: > Darauf muß man erst mal kommen! Es tut richtig gut mal ne vernünftige > Erklärung zu bekommen! Michael B. schrieb im Beitrag #7710538 um 18:55: > Du hast nicht mal begriffen, dass 4bpp 4 bit pro pixel heisst und deine > 8 bit Werte 2 Pixel enthalten, also 2 Werte.
:
Bearbeitet durch User
Bruno M. schrieb: > Darauf muß man erst mal kommen! Es tut richtig gut mal ne vernünftige > Erklärung zu bekommen! Du bist so schwer von Begriff, unglaublich! ALLE Beiträge bringen dich in die richtige Richtung aber du begreifst es einfach nicht. Dir wurde schon mehrfach gesagt schau dir das BMP Format an! Das hast du noch nicht getan. Ich habe mal für dich Gegoogelt : https://de.wikipedia.org/wiki/Windows_Bitmap
:
Bearbeitet durch User
Ehrlich gesagt: Es ist mir immer noch ein Rätsel, wie man so weit kommt, die Farbtabelle zu finden, aber ohne zu erwähnen, dass es um ein BMP geht. Es ist ja nicht so, als wäre diese immer an der gleichen Stelle, sondern hängt von der Version des Bitmap-Headers ab.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.