如何将RGB整数值转换为字符串颜色

7

请问有人能告诉我如何在C#中将三个int值 r,g,b 转换为字符串颜色(十六进制值)吗?

6个回答

7
int red = 255;
int green = 255;
int blue = 255;

string theHexColor = "#" + red.ToString("X2") + green.ToString("X2") + blue.ToString("X2");

1
取决于你的格式:例如 ARGB 只需在红色之前添加 alpha.ToString("X"),依此类推。重点是 ToString("X") 方法将以十六进制格式返回整数值。 - Tejs
3
如果您想表达的意思是比起您的示例,更好的写法是string color = string.Format("#{0:X}{1:X}{2:X}", r,g,b);" - Stecya
当然,这同样有效且更加简洁! - Tejs
1
这种方法的更多信息可以在这里找到:http://msdn.microsoft.com/en-us/library/8wch342y.aspx,因为我本人直到今天也不知道这种技巧 :) - AndyPerfect
8
这会生成一个无法解析的字符串。例如,使用 green=0。你必须使用 "X:2"。 - Hans Passant
应该是 X2 而不是 X:2。这是完整的代码: string.Format("${0:X2}{1:X2}{2:X2}", r, g, b) - jep

6

试试这个

 string s = Color.FromArgb(255, 143, 143, 143).Name;

我只想指出,当颜色不是由Argb创建时,.Name属性将不会给出十六进制值。(例如,Color.Red.Name将返回“Red”值) - HABJAN
是的,我知道,但saikamesh说他想从RGB值中获取字符串。 - Stecya
他说他想要“十六进制值”。 - Hans Passant
当我尝试这样做时,我收到的错误消息是“System.Windows.Media.Color”不包含“Name”的定义,并且找不到接受类型为“System.Windows.Media.Color”的第一个参数的扩展方法“Name”(您是否缺少使用指令或程序集引用?) - saikamesh
1
你应该明确指定你使用的是WPF还是Silverlight,System.Windows.Media.Color没有Name的定义,但是System.Drawing.Color有。 - Stecya

3

RGB 转 Hex:

string hexColor = string.Format("0x{0:X8}", Color.FromArgb(r, g, b).ToArgb());

Hex转RGB:

int rgbColor = int.Parse("FF", System.Globalization.NumberStyles.AllowHexSpecifier);

1
出现错误:'System.Windows.Media.Color' 不包含 'ToArgb' 的定义,也找不到接受类型为 'System.Windows.Media.Color' 的第一个参数的扩展方法 'ToArgb'(是否缺少 using 指令或程序集引用?) - saikamesh

1
请查看以下扩展方法:
public static class ColorExtensions
{
    public static string ToRgb(this int argb)
    {
        var r = ((argb >> 16) & 0xff);
        var g = ((argb >> 8) & 0xff);
        var b = (argb & 0xff);

        return string.Format("{0:X2}{1:X2}{2:X2}", r, g, b);
    }
}

这里是使用方法:

        int colorBlack = 0x000000;
        int colorWhite = 0xffffff;

        Assert.That(colorBlack.ToRgb(), Is.EqualTo("000000"));
        Assert.That(colorWhite.ToRgb(), Is.EqualTo("FFFFFF"));

0

解决PowerPoint形状对象的Fill.ForeColor.RGB成员的问题时,我发现RGB值实际上是BGR(蓝、绿、红),因此对于C# PowerPoint插件,将Fill.ForeColor.RGB转换为字符串的解决方案是:

string strColor = "";
var b = ((shpTemp.Fill.ForeColor.RGB >> 16) & 0xff);
var g = ((shpTemp.Fill.ForeColor.RGB >> 8) & 0xff);
var r = (shpTemp.Fill.ForeColor.RGB & 0xff);

strColor = string.Format("{0:X2}{1:X2}{2:X2}", r, g, b);

-1
我所做的是以下内容:
    int reducedRed = getRed(long color)/128; // this gives you a number 1 or 0. 
    int reducedGreen = getGreen(long color)/128; // same thing for the green value; 
    int reducedBlue = getBlue(long color)/128; //same thing for blue
    int reducedColor = reducedBlue + reducedGreen*2 + reducedRed*4 ;
    // reduced Color is a number between 0 -7 

一旦你有了reducedColor,就可以在0到7之间进行切换。
    switch(reducedColor){
       case 0: return "000000";      // corresponds to Black
       case 1: return “0000FF";         // corresponds to Blue
       case 2: return "00FF00";       // corresponds to Green
       case 3: return "00FFFF";        // corresponds to Cyan 
       case 4: return “FF0000";          // corresponds to Red
       case 5: return "FF00FF";       //corresponds to Purple
       case 6: return "FFFF00";     //corresponds to Yellow
       case 7: returnFFFFFF";       //corresponds to White
    }

O


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接