首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RGB/Brush转换为十六进制值

将RGB/Brush转换为十六进制值
EN

Stack Overflow用户
提问于 2015-11-26 09:37:47
回答 3查看 2.6K关注 0票数 3

所以,在我的程序中,我有3个滑块,SliderRed,SliderGreen,sliders。它们的最大值都是255。当我移动滑块时,名为EndColor的控件会正确地更改颜色,但我还没有想出一种方法来使hexcode.text (Textblock)将画笔或颜色转换为十六进制值,例如#FF0000

我应该用什么来让它起作用?

代码语言:javascript
复制
public void SliderChanged()
{
    byte r = byte.Parse(sliderRed.Value.ToString());
    byte g = byte.Parse(sliderGreen.Value.ToString());
    byte b = byte.Parse(sliderBlue.Value.ToString());

    EndColor.Background = new SolidColorBrush(Color.FromArgb(255, r, g, b));
    hexcode.Text = EndColor.Background.ToString(); //Something like this
}

我所需要的只是显示十六进制值的hexcode.Text

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-26 09:49:11

首先,让我指出,假设您的滑块的value属性返回一个int,则您要将一个int转换为一个string,然后再返回。这是不必要的。而不是

代码语言:javascript
复制
byte r = byte.Parse(sliderRed.Value.ToString());

你要做的就是

代码语言:javascript
复制
byte r = (byte)sliderRed.Value;

这绕过了字符串转换。将一些东西转换成一个字符串,然后将它从一个字符串转换回另一个字符串,这是一种代码气味,它应该会让您停下来思考,如果没有更好的方法。

将颜色转换为它的十六进制代码很容易,因为您已经有了R、G和B值。你所需要的就是:

代码语言:javascript
复制
hexCode.Text = string.Format("#{0:X2}{1:X2}{2:X2}", r, g, b);

用格式字符串"X2"格式化一个数字,强制它以十六进制表示,有2位数。所以你只需把这三个都放在一起,然后把哈希符号放在前面。

编辑

如果您在代码的各个部分之间传递颜色数据,则应该始终使用System.Drawing.Color对象来传递颜色数据,然后每当您需要显示十六进制字符串时,就生成它。不要传递十六进制字符串,并在需要时将其转换回Color。还记得我说过如何将事物转换为字符串并再次返回是一种代码味吗?

如果您发现自己做了很多事情,那么在Color中添加一个扩展方法是有意义的,这样您就可以很容易地调用它。下面是一个实现该方法的类:

代码语言:javascript
复制
static class ColorExtensions
{
    public static string ToHexString(this System.Drawing.Color color)
    {
        return string.Format("#{0:X2}{1:X2}{2:X2}", color.R, color.G, color.B);
    }
}

这将为所有Color值提供一个ToHexString()方法,在上面的代码中,您可以如下所示:

代码语言:javascript
复制
var color = Color.FromArgb(255, r, g, b);
EndColor.Background = new SolidColorBrush(color);
hexcode.Text = color.ToHexString();
票数 9
EN

Stack Overflow用户

发布于 2015-11-26 09:44:34

hexcode.Text = ((SolidColorBrush)(EndColor.Background)).Color.ToString();应该这么做。

注意,这里使用的Color.ToString()System.Windows.Media.Color.ToString()实现(因为SolidColorBrushSystem.Windows.Media类的一部分)。

System.Drawing.Color.ToString()将给出不同的结果-参见https://msdn.microsoft.com/en-us/library/50cb8sdx(v=vs.110).aspx绘图与https://msdn.microsoft.com/en-us/library/ms606572(v=vs.110).aspx媒体

票数 1
EN

Stack Overflow用户

发布于 2021-04-05 22:32:49

为此,您可以使用ColorHelper库。

RGB到HEX:

代码语言:javascript
复制
using ColorHelper;
...
HEX hex = ColorHeConverter.RgbToHex(new RGB(10, 20, 30));

链接:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33935057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档