我正在用C#做一些图形,我需要将一个6位rgb十六进制(如0xaabbcc(rr gg bb))转换为3个RGB值。我不想使用Color
。我不是在为Windows开发,所以我不想使用Microsoft.CSharp
库。即使有一些方法,由于所有花哨的绒毛,我不太喜欢.NET框架,我更喜欢创建自己的类库等。
我能够将3个RGB值转换为单个十六进制数,但我不知道如何做相反的事情。
private static long MakeRgb(byte red, byte green, byte blue)
{
return ((red*0x10000) + (green*0x100) + blue);
}
我的原始转换代码。
任何人都知道将6位十六进制数分成3个独立字节的好方法吗?
编辑:
我不使用.NET框架,不使用Mono,我不可以访问System.Drawing.Color。
这不应该被标记为重复,因为它与.NET无关。
答案 0 :(得分:3)
以大多数语言工作的旧时尚方式:
long color = 0xaabbcc;
byte red = (byte)((color >> 16) & 0xff);
byte green = (byte)((color >> 8) & 0xff);
byte blue = (byte)(color & 0xff);
答案 1 :(得分:0)
您可以使用bitmasking
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);