如何从24位十六进制获取RGB值(不使用.NET Framework)

时间:2015-10-10 01:57:17

标签: c# colors hex rgb

我正在用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无关。

2 个答案:

答案 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);