BPP
aus RHWiki, der freien Romhacking-Enzyklopädie
BPP ist die Abkürzung für 'Bits per Pixel' (= Bits pro Bildpunkt). In Grafiken wird damit die Farbtiefe angegeben: Je mehr Bits einem Pixel zur Verfügung stehen, desto breiter ist die Palette aus welcher die Farbe des Pixels gewählt werden kann. Ist die Farbtiefe sehr groß, kann auch direkt aus dem RGB-Spektrum gewählt werden.
Die Maximalzahl der wählbaren Farben ergibt sich durch: Farbzahl = (2 ^ BPP)
Ein Bild mit bspw. 1bpp hätte also nur 2 Farben - in der Regel sind das Schwarz und Weiß, wohingegen ein Bild bei 2bpp schon 4 Farben haben kann.
Darstellungsweise
Hier soll das grundliegende Prinzip des Gebrauchs von palettierten Tiles (also Tiles, die keine vollen 16/32 bit für die Farbwahl verwenden) gezeigt werden. Außerdem soll man hier einmal eine Vorstellung davon kriegen, wie die Pixel nun wirklich definiert sind und wie das ganze vom Byte zum Pixel bzw. zur Farbe wird. Die Beispiele hier beziehen sich auf den Gameboy und den Wonderswan Color.
| 2bpp auf dem Gameboy (Color) | 4bpp auf dem Wonderswan Color | ||
|
Die Palette zu dem Bild enthält die Farben Weiß, Orange, Pink und Schwarz. Wenn wir nun in exakt dieser Reihenfolge Farbnummern von 0 bis 3 verteilen und diese auf unser Bild umsetzen, erhalten wir das Bild rechts daneben. Da unser System 2bpp ist, brauchen wir also pro Pixel 2 Bits, also pro Pixel-Reihe 2 Bytes und pro Tile demnach 0x10 Bytes. 0 0 0 1 1 0 0 0 Byte 2, 0x18 in Binär 0 0 0 3 3 0 0 0 Farbnummern in dezimal Dieselbe Methode lässt sich auch auf alle anderen Zeilen anwenden. Wichtig dabei ist, dass die Leserichtung jeder Spalte auf anderen Systemen ebenfalls variieren kann. Hier (also mit dem Gameboy-Format) ist sie jedoch von oben nach unten, wenn man 2 aufeinanderfolgende Bytes 'vertauscht in Binär untereinander legt'. 0 0 0 1 0 1 0 0 Byte 4, 0x14 in Binär 0 0 0 3 1 3 0 0 Farbnummern in dezimal Es geht immer so weiter, bis ein ganzes Tile mit 8x8 Pixeln entsteht. |
Die Palette zu diesem Bild enthält insgesamt 16 Farben, ich werde nur die benutzten und ihre Nummern nennen. 0, Schwarz; 1, Dunkelgrau; 2, Hellgrau; 3, schmutziges Weiß; 4, Hellblau; 7, Dunkelblau. Das rechte Bild beinhaltet wieder diese Nummern, damit es besser Vorstellbar ist. Da es 4 Bits per Pixel sind, brauchen wir 4 Byte pro Pixelreihe und insgesamt 0x20 Bytes pro 8x8 Tile. 0 0 0 0 0 0 0 0 Byte 7, 0x00 in Binär 7 7 0 2 3 3 0 7 Farbnummern in dezimal Das lässt sich jetzt beliebig auch für die anderen Pixelreihen durchführen. Es sei wieder darauf hingewiesen, dass die Lesereihenfolge (also vertikal von oben nach unten oder andersrum) bzw. ob man die Bytes vertauschen muss (so wie in diesem Beispiel geschehen) vom System abhänging ist. Ebenfalls ist vom System abhängig, ob die 4 Bits für einen Pixel nicht hintereinander gespeichert werden etc. Das hier erklärte System ist übrigens das SMS-System. |
Paletten
Grafikmodi unter 16bpp verwenden Paletten um eine höhere Farbtreue zu erreichen. Dagegen ist es bei Farbtiefen ab 16bpp sinnvoller, direkt die RGB-Werte anzugeben (mehr zu den Vor- und Nachteilen im Artikel über Paletten).
Wie RGB-Werte in einem Farbwert aufgebaut sind, hängt vom verwendeten System ab. Siehe dazu: RGB.
Beispiel: Ein Farbwert in 16bpp könnte so aufgebaut sein: rrrrrggggggbbbbb (jeder Buchstabe steht für ein Bit; alle Bits einer Farbe ergeben zusammen die Farbe.) Hier kann man Rot von 0-31, Grün von 0-63 und Blau von 0-31 wählen. Wenn alle Werte auf 0 stehen, hätte man Schwarz, bei R=31 G=63 B=31 hätte man weiß. R=31 G=31 B=31 wäre hell-Magenta (da von Grün nur die Hälfte des maximal möglichen gesetzt ist). Ein Grasgrün wäre z.B. 10001 110000 01010 Dort ist R=17/31 G=48/63 und B=9/31 (mehr zur Umrechnung von Farbwerten im Artikel RGB und in den spezifischen Systeminformationen.)




