Konvertiert einen RGB-Farbwert in Dezimal

8

Wie konvertiere ich einen RGB-Farbwert in eine einfache Dezimalzahl?

Also ich habe: RGB (255,255,255) ist weiß Sein Dezimaläquivalent ist: 16777215

Ich habe versucht zu denken, es könnte nur sein:

%Vor%

Obwohl das nicht funktioniert.

Wer kennt den Algorithmus / die Gleichung, um RGB (oder rgba) in Dezimal zu konvertieren?

    
Jake M 12.12.2011, 01:04
quelle

5 Antworten

10

Ganzzahlige RGB-Zahlen werden typischerweise als drei verschiedene Bytes behandelt, wobei das linke (höchste) Byte rot, das mittlere Byte grün und das rechte (niedrigste) Byte blau ist. Sie können die Werte dieser einzelnen Bytes wie folgt abrufen:

%Vor%

Sie können eine Farbe aus ihren Komponenten neu erstellen, indem Sie die Bytes zurückschieben:

%Vor%

Ersetzen Sie in Ihrem Fall einfach components.r (etc) durch Ihre tatsächlichen Variablen.

    
Wayne Burkett 12.12.2011, 01:37
quelle
5

Eine viel bessere Antwort (in Bezug auf die Klarheit) ist dies:

%Vor%

LONG ist Ihre lange Ganzzahl (dezimal), die Sie erstellen möchten. Einfach, nicht wahr? Sicher, Bitshift

    
Sam Brown 02.04.2013 09:45
quelle
3
%Vor%

(Ich denke, das ist die richtige Reihenfolge für die r, g, b Werte)

Aktualisieren

Ich habe gerade nach Browser-Anwendungen gesucht und die Reihenfolge falsch gewählt. Die richtige Formel für Browser (HTML + CSS + Javascript lesen) lautet also:

%Vor%

Angenommen, r, g, b Werte & lt; = 255

Andere APIs können eine andere Reihenfolge für die r, g, b Werte erwarten. Ich erinnere mich zumindest an eine, die die Reihenfolge umgekehrt hat (nach meiner ursprünglichen Antwort), aber ich denke, welche ist es im Moment.

    
Andrew Cooper 12.12.2011 01:08
quelle
1
%Vor%     
sharon_antony 12.10.2012 12:43
quelle
0

Sie müssen das R um 16 nach links verschieben, das G um 8 nach links oder beide nach B. Betrachten Sie die Werte als Bits und alles wird klar:

R 255 = 11111111B G 255 = 11111111B B 255 = 11111111B

Shift R 16: 111111110000000000000000 Shift G 8: 000000001111111100000000

oder in B: 111111111111111111111111

In Dezimal konvertieren: 16777215

    
Martin James 12.12.2011 01:14
quelle

Tags und Links