Dezimal -> Hex Problem

NoGFX

Erfahrenes Mitglied
Habe zwar schon das Forum durchsucht, aber keine passende Lösung gefunden.

Habe aus langeweile mal einen prototypen zum faden von Farben geschrieben, nur gibt es dabei ein nerviges Problem bei der Umwandlung von Dezimal zu Hex.

Hat man z.B. eine Zahl wie 15, welche im Hexadezimalsystem einfach per "e" beschrieben werden kann, ergibt das natürlich mit der Funktion toString auch den Wert "e", wobei der Wert "0e" benötigt wird um eine colorTransform Funktion erfolgreich durchzuführen.

Example given:
PHP:
//Dezimal
var rr:Number = 10;
var gg:Number = 10;
var bb:Number = 10;

//Hex
var rrHex:String = rr.toString(16);
var ggHex:String = gg.toString(16);
var bbHex:String = bb.toString(16);
//
colorTrans.rgb = Number("0x" + rrHex + ggHex + bbHex); // Ergibt: 0xAAA (Wobei 0x0A0A0A benötig)

Gibt es eine Möglichkeit, dieses Problem ohne große Umwege zu lösen?
 
Zuletzt bearbeitet:
Hallo,

die Zahl 10 entspricht dem hexadezimalen A, das ist schon richtig so. Dein Problem liegt eigentlich woanders. Die RGB-Farbwerte setzen sich eben nicht bloss aus 3, sondern aus 6 Faktoren zusammen, nämlich je einem Multiplikator- und einem Offset-Wert pro Farbe (rot, blau, grün).
Demzufolge müsstest du folgende sechs Faktoren einbringen:

Code:
var rm: Number = 0;
var ro: Number = 10;

var gm: Number = 0;
var go: Number = 10;

var bm: Number = 0;
var bo: Number = 10;

var rmHex: String = rm.toString(16);
var roHex: String = ro.toString(16);

var gmHex: String = gm.toString(16);
var goHex: String = go.toString(16);

var bmHex: String = bm.toString(16);
var boHex: String = bo.toString(16);

var c: String = String ("0x"+rmHex+roHex+gmHex+goHex+bmHex+boHex);

colorTrans.rgb = Number(c);


gruss
 
Mit der Methode klappt es zwar, habe allerdings noch eine Frage:

Die Farbe setzt sich zusammen aus: r(0-255), g(0-255), b(0-255) - wie kann es dann aus 6 Werten bestehen? Zudem die Methode mit 6 Werten weitaus ungenauer berechnet, als die mit 3.
 
Hallo,

der Hellligkeitswert einer Farbe im RGB-System setzt sich aus den oben genannten zwei Faktoren zusammen: Dem Offset-Wert und dem Multiplikator. Da wir in Flash mit einem 8Bit-RGB-System arbeiten, können Offset und Multiplikator eine Reichweite von 0 bis 16 haben. Wenn man diese Faktoren nun multipliziert, gibt das eine Reichweite von 0 bis 255 pro Farbe. Je nach Anwendungsbereich notiert man die dezimalen Werte (255) oder die hexadezimalen Werte (ff).

Als Beispiel:
Die hexadezimale Zahl 0xff6622 setzt sich wie folgt zusammen:
Rot: 16*16
Grün: 6*6
Blau: 2*2

Hier findest du auch eine sehr gute, ein wenig tiefer gehende Erklärung dieser Zusammenhänge.

gruss
 
RGB - Rot, Grün, Blau.
Dies sind additive Farben, Lichtfarben, welche, wie der Name schon sagt, auch im Licht vorhanden sind. Wenn diese Lichtfarben gemischt werden, ergeben sie automatisch hellere Farben. Anders läuft es bei subtraktiven Farben, oder in anderen Farbsystemen (l*a*b).

In dem RGB System steht die 255, nach meinen Kenntnissen, lediglich für eine 100% ein, die angibt, wie groß der Anteil dieser Farbe ist.

Ich habe nocheinmal das Script umgeschrieben, welches auch zeigen dürfte, dass man hier besser mit 3 als mit 6 Werten rechnet. Bei 6 Werten wird die Rechnung sehr ungenau, überspringt viele Farben und hat an sicht nichtmehr viel mit einem Farbwert zu tun, es ist einfach nurnoch eine Zahl die errechnet wird. Bei 3 Werten hingegen steht jeder Wert für eine Farbe, weswegen im Endeffekt auch mehr Farben auf dem Weg zur Zielfarbe angezeigt werden.

Ps: Das Script funktioniert nun auch mit 3 Werten ;)
 
Hallo,


mein Ansatz von oben ist nicht ganz lupenrein, weil ich die Multiplikation ausgelassen habe, das ist richtig. Nichtsdestotrotz bleibt die Tatsache, dass dir die Multiplikation der zwei Faktoren eines jeden Farbwerts im Hexstring den jeweiligen Dezimal-Wert liefern. Die Zahl 255 steht nur in einem 8Bit-System und nicht etwa generell für eine hundertprozentige Deckung (16*16 = 255 = ff). Das ColorTransform-Objekt arbeitet ausserdem mit sechs Faktoren, auch wenn man für eine Transformation nicht zwingend alle 6 benötigt.

gruss
 
Zurück