如何从 24 位十六进制获取 RGB 值(不使用 .NET Framework)[重复]
Posted
技术标签:
【中文标题】如何从 24 位十六进制获取 RGB 值(不使用 .NET Framework)[重复]【英文标题】:How to get RGB values from 24-bit Hex (Without .NET Framework) [duplicate] 【发布时间】:2016-01-08 01:30:54 【问题描述】:我正在用 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 无关。
【问题讨论】:
使用颜色有什么问题?它不在 Microsoft.CSharp 中。它在 System.Drawing 中,在 Mono 中可用。 @Cyber 如果你不是为 Windows 开发,我假设你使用的是 Mono,它有System.Drawing.Color
和 Microsoft.CSharp
。您不必避免使用它们。
如果你想长期存储,你可以使用位掩码
特别是这个answer 显示了仅使用位操作的转换。
我没有使用 Mono。
【参考方案1】:
适用于大多数语言的老式方式:
long color = 0xaabbcc;
byte red = (byte)((color >> 16) & 0xff);
byte green = (byte)((color >> 8) & 0xff);
byte blue = (byte)(color & 0xff);
【讨论】:
【参考方案2】:你可以使用位掩码
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);
【讨论】:
【参考方案3】:System.Drawing.Color
和 Microsoft.CSharp
在 Mono 上都可用(如果你不使用 .NET,我假设你正在使用它)
无论如何,this 已经是一个很好的答案,但如果你真的不打算使用System.Drawing.Color
,那么你应该编写自己的类。
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 string ToString()
return string.Format("R: 0 G: 1 B: 2", Red, Green, Blue);
static void Main(string[] args)
long lcolor = MakeRgb(50, 100, 150);
MyColorClass color = new MyColorClass(lcolor);
Console.WriteLine(color);
【讨论】:
以上是关于如何从 24 位十六进制获取 RGB 值(不使用 .NET Framework)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Excel/VBA 中获取 RGB 颜色的相应十六进制值?