Comment obtenir des valeurs RVB à partir de hexadécimal 24 bits (sans .NET Framework)

Je fais des graphiques en C # et je dois convertir un hexadécimal rgb à 6 chiffres tel que 0xaabbcc (rggbbb) en 3 valeurs RVB. Je ne veux pas utiliser de Color . Je ne développe pas pour Windows, je ne souhaite donc pas utiliser la bibliothèque Microsoft.CSharp . Même s’il y a un moyen de contourner que je n’aime pas trop le framework .NET à cause de tous ces détails fantaisistes, je préfère créer mes propres bibliothèques de classes, etc.

J’ai été capable de convertir 3 valeurs RVB en un seul nombre hexadécimal, mais je ne sais pas comment faire l’inverse.

 private static long MakeRgb(byte red, byte green, byte blue) { return ((red*0x10000) + (green*0x100) + blue); } 

Il y a mon code pour la conversion d’origine.

Quelqu’un connaît un bon moyen de séparer un nombre hexadécimal à 6 chiffres en 3 octets distincts?

MODIFIER:

Je n’utilise pas le framework .NET, n’utilise pas Mono et je n’ai pas access à System.Drawing.Color.

Cela ne doit pas être marqué comme un doublon car cela n’a rien à voir avec .NET.

Ancienne manière qui fonctionnera dans la plupart des langues:

 long color = 0xaabbcc; byte red = (byte)((color >> 16) & 0xff); byte green = (byte)((color >> 8) & 0xff); byte blue = (byte)(color & 0xff); 

Vous pouvez utiliser le masquage

 private static long MakeRgb(byte red, byte green, byte blue) { return ((red*0x10000) + (green*0x100) + blue); } private static byte GetRed(long color) { return (byte)((color & 0xFF0000) / 0x10000); } private static byte GetGreen(long color) { return (byte)((color & 0x00FF00) / 0x100); } private static byte GetBlue(long color) { return (byte)((color & 0x0000FF)); } long color = MakeRgb(23, 24, 25); byte red = GetRed(color); byte green = GetGreen(color); byte blue = GetBlue(color); 

Les deux System.Drawing.Color et Microsoft.CSharp sont disponibles sur Mono (que je suppose que vous utilisez si vous n’utilisez pas .NET)

En tout cas, c’était déjà une bonne réponse, mais si vous n’allez vraiment pas utiliser System.Drawing.Color , alors vous devriez probablement écrire votre propre classe.

 class MyColorClass { public byte Red { get; set; } public byte Green { get; set; } public byte Blue { get; set; } public MyColorClass(long color) { Red = (byte)((color >> 16) & 0xff); Green = (byte)((color >> 8) & 0xff); Blue = (byte)(color & 0xff); } public override ssortingng ToSsortingng() { return ssortingng.Format("R: {0} G: {1} B: {2}", Red, Green, Blue); } } static void Main(ssortingng[] args) { long lcolor = MakeRgb(50, 100, 150); MyColorClass color = new MyColorClass(lcolor); Console.WriteLine(color); }