Ich habe in den Codebasen einiger Computergrafiksoftware gesehen, dass manchmal die höheren Bits von Bilddaten im RGB565-Format in die niedrigeren Bits repliziert werden, wenn sie in das Format RGBA8888 mit höherer Bittiefe konvertiert werden.
Ich habe zum Beispiel den Kommentar des Benutzers "eq" in diesem gamedev.net-Thread gefunden :
Ich ziehe es vor, die höheren Bits in die undefinierten niedrigeren Bits zu replizieren:
R8 = (R5 << 3) | (R5 >> 2);
Allerdings verstehe ich den Grund dafür nicht.
Was nützt der Zweck, diese Bits in die konvertierten Daten zu replizieren?
color-management
conversion
abwischen
quelle
quelle
Antworten:
Ohne Replikation der Bits sind die LSBs 0, sodass sie für den Maximalwert von 0x1f (maximal für 5 Bits) bei Konvertierung in 8 Bit auf 0xf8 erweitert werden. Was Sie wollen, ist 0xff, sodass der Bereich von 0x00-> 0x1f auf 0x00-> 0xff anstatt auf 0x00-> 0xf8 abgebildet wird. Ohne das Zusammenführen des LSB könnten Sie 0x1f, 0x1f, 0x1f nicht in Weiß (0xff, 0xff, 0xff) konvertieren. Dies ist übrigens dasselbe wie N * 0xff / 0x1f.
quelle
Es gibt tatsächlich einen ziemlich guten mathematischen Grund für die Bitreplikation:
QED
quelle