Konvertieren einer RGB-Farbe-zu-Dezimal-Wert
Wie konvertiere ich einen RGB-Farbwert, um einfach nur dezimal?
Also ich habe: RGB(255,255,255) weiß
Ihr dezimales äquivalent ist: 16777215
Ich habe versucht zu denken, es könnte nur sein:
var dec = r*g*b; //but this doesn't work
Obwohl das nicht funktioniert.
Wer kennt den Algorithmus/Gleichung zum umwandeln von RGB - (oder rgba -) zu dezimal?
- 16,777,215 ist die Dezimalzahl hex-version, 0x00FFFFFF, Ihrer RGB(255,255,255).
- Was planst du zu tun mit diesen Werten? Auf welche software/Funktionen/usw sind, die Sie Ihnen gegeben?
- Ich habe die Farbwerte aus einer flash-Anwendung, die in dezimal & ich brauche die Anzeige in html/css & konvertieren auch wieder Umgekehrt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
RGB-Ganzzahlen werden in der Regel behandelt, als drei unterschiedliche bytes, wo die linke (die höchste Ordnung) byte ist rot, das mittlere byte ist grün und die meisten der rechten (niedrigste Ordnung) byte ist blau. Sie können rufen Sie die Werte der einzelnen bytes so:
Können Sie neu erstellen, eine Farbe aus seiner Komponenten durch die Verschiebung der bytes zurück, in:
In deinem Fall, ersetzen Sie einfach
components.r
(etc) mit Ihren tatsächlichen Variablen.Eine viel bessere Antwort (in Bezug auf Klarheit), ist dies:
LANG ist dein long integer (dezimal), die Sie machen wollen.
Einfach, oder?
Sicher, bitshift
(Ich denke, das ist die richtige Reihenfolge für die r -, g -, b-Werte)
Update
Ich habe gerade überprüft, die für browser-Anwendungen und ich hab die Reihenfolge falsch ist, also die richtige Formel für Browser (Lesen von HTML+CSS+javascript):
Vorausgesetzt, r,g,b-Werte <= 255
Andere API ' s können erwarten, dass eine andere Reihenfolge für die r -, g -, b-Werte. Ich scheine zu erinnern, zumindest eine, die hat die Reihenfolge Umgekehrt (pro meine ursprüngliche Antwort), aber ich denke, es ist im moment.
r
undb
.max(r, 255)
wenn Sie möchten clip die Wert eher als Maske (die möglicherweise besser geeignet für einige Anwendungen).Müssen Sie Links-Verschiebung der R 16, der G Links durch 8 und oder sowohl in der B. Sehen Sie sich die Werte als bits und wird alles klar:
R 255 = 11111111B
G 255 = 11111111B
B 255 = 11111111B
Shift-R 16: 111111110000000000000000
Shift G 8: 000000001111111100000000
oder in B: 111111111111111111111111
Konvertieren Sie Sie in Dezimalformat: 16777215
Ich bin damit einverstanden, dass bitshift ist klarer und wahrscheinlich eine bessere Leistung.
Sagte, dass, wenn Sie möchten, eine math Antwort durch Sprache unterstützen (wie dies zu tun in einer Tabellenkalkulation) Modul % und trunc() oder floor () " machen Sie es sich einfach:
Vorausgesetzt 8-bit-Werte für rot, grün und blau natürlich (0-255):
Diskussion:
Zeigt auf sam ' s Antwort, die RGB-Werte sind fast immer big-endian-im Sinne von Ordnung, sicherlich auf Webseiten, jpeg und png. Ich persönlich denke, es ist am besten zu multiplizieren rot mit 65536 statt blau, es sei denn, Sie arbeiten mit einer Bibliothek, die es erfordert, anders.
Zurückzukehren, um die Werte zu trennen:
höheren bytes.
Für R & G die Zahl abgeschnitten werden müssen, verwerfen Sie den Rest, sprachspezifisch, hauptsächlich wir wollen die ganze Zahl ist. In javascript Math.trunc() ist der einfache Weg, und Math.floor() auch funktioniert. Es ist nicht nötig für B wie IST der Rest aus dem Modul — aber dies setzt auch Voraus, dass wir nicht brauchen, error checking, wie von Benutzereingaben, d.h. der Wert für B ist immer eine ganze Zahl zwischen 0 und 255.