したがって、現在、0から2 ^ 24までの数値があり、それを3つのRGB値にマップする必要があります。これをどのように達成するかについて少し問題があります。どんな援助も大歓迎です。
できるよ
Color c = Color.FromArgb(someInt);
次に、赤、緑、青の値にそれぞれc.R
、c.G
、c.B
を使用します。
どの色がどこにあるかに応じて、ビットシフトを使用して次のように個々の色を取得できます。
int rgb = 0x010203;
var color = Color.FromArgb((rgb >> 16) & 0xff, (rgb >> 8) & 0xff, (rgb >> 0) & 0xff);
上記の式は0x00RRGGBB
を想定していますが、色は0x00BBGGRR
である可能性があります。その場合は、16, 8, 0
の値を変更するだけです。
これは、System.Drawing.Color
または独自のカラークラスの代わりにSystem.Windows.Media.Color
も使用します。それはアプリケーションによって異なります。
BitConverter
クラスを使用して、intからバイトを取得できます。
byte[] values = BitConverter.GetBytes(number);
if (!BitConverter.IsLittleEndian) Array.Reverse(values);
配列は4バイトになります。最初の3バイトにはあなたの番号が含まれています:
byte b = values[0];
byte g = values[1];
byte r = values[2];