Forum: PC-Programmierung C# Frage zu Color.FromArgb("hex-Wert")


von Reinhard #. (gruebler)


Lesenswert?

Hallo zusammen

Ich möchte eine Color-Variablen einen
Farbwert als Hex-Zahl zuweisen,
so wie in diesem Beispiel
1
  Color Farb2 = Color.FromArgb(0xFF665544);

Das geht aber nicht. Es wird eine Vorzeichenlose
int-Zahl erwartet.
Die ersten beiden Ziffern müssen aber FF bleiben,
da dies der Transparentwert ist und ich einen
Vollton haben will.

Ich könnte es auch so machen:

1
  Color Farb2 = Color.FromArgb(255, 102, 85, 68);

Aber dann habe ich vier Variablen pro Farbwert.

Wer kennt sich aus?

: Bearbeitet durch User
von Markus V. (valvestino)


Lesenswert?

Reinhard ## schrieb:
> Ich möchte eine Color-Variablen einen
> Farbwert als Hex-Zahl zuweisen,
> so wie in diesem Beispiel
>   Color Farb2 = Color.FromArgb(0xFF665544);
>
> Das geht aber nicht. ...
Klar, dass das nicht geht. Das Literal 0xFF665544 ist vom Typ uint 
(System.UInt32), während die Methode Color.FromArgb einen int 
(System.Int32) erwartet. Implizite Konvertierung von int nach uint und 
umgekehrt gibt es in C# nicht.

Wenn Du das Literal explizit castest, dann klappt der Aufruf ohne 
Beschwerden seitens des Compilers:
1
    Color Farb2 = Color.FromArgb((int)0xFF665544);

Alternativ könntest Du auch die Convert-Klasse bemühen:
1
   ... Convert.ToInt32(0xFF665544) ...

Grüße
Markus

von Borislav B. (boris_b)


Lesenswert?

Markus Volz schrieb:
> Wenn Du das Literal explizit castest, dann klappt der Aufruf ohne
> Beschwerden seitens des Compilers:

Das funktioniert nicht! Der Compiler sollte sich beschweren:
"Constant value '4284896580' cannot be converted to a 'int' (use 
'unchecked' syntax to override)"

Und die Meldung liefert ja schon die Lösung:
1
unchecked
2
{
3
  var c = Color.FromArgb((int) 0xFF665544);
4
}

von Markus V. (valvestino)


Lesenswert?

Boris B. schrieb:
> Das funktioniert nicht! Der Compiler sollte sich beschweren:
> "Constant value '4284896580' cannot be converted to a 'int' (use
> 'unchecked' syntax to override)"

Touche! ;-)

: Bearbeitet durch User
von Reinhard #. (gruebler)


Lesenswert?

Ok. Danke für den Tipp.

Aber ich kann immer noch nicht verstehen,
warum die Methode FromArgb int-Werte verlangt.
Es müssten eigentlich uint-Werte sein.

von Olli (Gast)


Lesenswert?

Ja, das macht keinen Sinn. uint wäre besser.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.