Autor Beitrag
thebaaaam
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 19.05.14 23:32 
Hallo zusammen

Für die Darstellung von Felder mit einer Farbe in einer Website muss ich den Farb-Wert von einem int in einen Hex-String konvertieren.

Soweit so gut. Eigentlich banal oder?

Ich habe das bisher so gemacht:
ausblenden C#-Quelltext
1:
8674610.ToString("X6")					


Nun wurde mir aber gesagt, dass dies falsch sei bzw. die Werte nicht stimmen.

Die Konvertierung soll so erfolgen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public static String Convert2HexColor(this int color)
{
  Color c = Color.FromArgb(color);
  String rtn = String.Empty;
  rtn = c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
  return rtn;
}

...
ausblenden C#-Quelltext
1:
8674610.Convert2HexColor()					


nun bei den Tests die ich gemacht habe bekomme ich immer identische Werte mit beiden Varianten.

Ist das Ergebnis nun in beiden Varianten dasselbe oder nicht?


mfg
Patrick
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 20.05.14 09:56 
Hallo und :welcome:

auf den ersten Blick scheint es identisch zu sein, ABER...

Dies gilt nur für Werte vom Typ RGB, sobald jedoch auch ein Alpha-Wert (d.h. ARGB) vorliegt, bekommt man bei der ersten Variante dann z.B. "FFAABBCC" raus, dagegen bei der 2. Variante nur "AABBCC" - die Angabe der Größe ist ja eine Mindestgröße.
Es kommt also drauf an, woher der Color (bzw. int)-Wert kommt und wie er interpretiert werden soll.

Edit: es gibt noch Alternativen:
ausblenden C#-Quelltext
1:
String.Format("#{0:X2}{1:X2}{2:X2}", c.R, c.G, c.B)					

ColorTranslator.ToHtml (hier erhältst du aber evtl. die Webfarbnamen, z.B. "Red", "Green" "Blue" etc.)

PS. Die Zuweisung von String.Empty (in deiner 2. Variante) ist überflüssig!
thebaaaam Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 20.05.14 13:32 
Da sind mir wohl 8 Bit durch die lappen gegangen :lol:

In meinem Fall ist es so, dass nur RGB von Interesse ist, jedoch auch negative int Werte daher kommen was dann Werte im Alpha bedeutet.

Und irgendwie habe ich das mit der Mindestgrösse überlesen :idea:

Meine Lösung (RRGGBB) sieht nun wie folgt aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
public static string ToX6RGB(this int value)
{
    return (value & 0x00FFFFFF).ToString("X6");
}


Geh ich richtig in meiner Annahme das dies jetzt 100% stimmt für RRGGBB aus einem int (AARRGGBB) auszugeben?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 20.05.14 14:52 
Ja, müsste m.E. jetzt so stimmen.

Am besten aber du schreibst ein paar Unit-Tests (u.a. mit Grenzfällen) dafür. ;-)

Für diesen Beitrag haben gedankt: thebaaaam