Sie versuchen, eine Basiskonvertierung oder etwas Ähnliches zu machen. Wie auch immer, die Logik ist wie bei der Basiskonvertierung. 4 Bytes = 32 Bit. Also 32-Bit-Ganzzahl ohne Vorzeichen wäre gut.
In diesem Fall haben Sie:
%Vor% es ist so:
Sie haben 4 Datenbytes, was
wobei X entweder 1 oder 0 wert ist. Du mappst sie so:
%Vor% und dann musst du sie nur hinzufügen, aber vorher verschiebst du die Bits. Sie verschieben die Bits A
nach links um 8 * 3 (um die Grenzen von R
, G
und B
Bits zu überschreiten), dann verschieben Sie die Bits R
um 8 * 2 und so an.
Sie fügen diese 32-Bit-Ganzzahlen hinzu:
%Vor% Dabei kann A
, R
, G
, B
entweder 0
oder 1
sein und als Ganzes den 8-Bit-Wert des Kanals darstellen. Dann fügen Sie sie einfach hinzu und erhalten das Ergebnis. Oder als DarkDust geschrieben, benutze nicht den Operator +
, sondern stattdessen den Operator |
(bitweise oder), seit es sollte in diesem speziellen Fall schneller sein.
Sie könnten dies tun:
Nehmen wir an, dass a
, r
, g
und b
vom Typ unsigned char
/ uint8_t
:
Oder allgemeiner ( a
, r
, g
und b
mit beliebigem Integer-Typ):
Dies gibt Ihnen eine eindeutige Ganzzahl für jede ARGB-Kombination. Sie können die Werte folgendermaßen zurückbekommen:
%Vor%Nicht ganz. Sie müssen Bit-Shifting und nicht einfache Multiplikation verwenden.
Jeder Wert in Ihrer Farbkarte ist 8 Bytes lang, richtig? Damit die resultierende Zahl eindeutig ist, muss sie alle zusammen für insgesamt 8 * 4 = 32 Bits zeichnen. Schau dir folgendes an:
Sie möchten:
%Vor%und es so aussehen lassen:
%Vor%Dies bedeutet, dass Sie Folgendes zusammenfügen müssen:
%Vor% Wir erreichen dies, indem wir uns nach links verschieben. Nimmt man A
und verschiebt man 24 Bits nach links, wird AAAAAAAA
gefolgt von 24 0
Bits erzeugt, genau wie wir es wollen. Wenn Sie dieser Logik folgen, sollten Sie Folgendes tun:
Um zu veranschaulichen, warum das, was Sie vorschlagen (mit Multiplikation) nicht funktioniert, was Sie vorschlagen, ergibt sich in den folgenden Binärzahlen, die Sie überlappen sehen können:
%Vor%Darüber hinaus werden die Werte für A, R, G, B einfach zur resultierenden Zahl addiert. Vereinfachen Sie Ihre Mathematik oben erhalten wir:
%Vor%Hoppla.
Tags und Links rgb