将RGB/Brush转换为十六进制值
本文关键字:十六进制 转换 Brush RGB | 更新日期: 2023-09-27 18:24:23
所以,在我的程序中,我有3个滑块,SliderRed,SliderGreen,SliderBlue。它们的最大值都是255。当我移动滑块时,名为EndColor
的控件会正确地更改颜色,但我还没有找到一种方法来获取hexcode.text(Textblock),将画笔或颜色转换为十六进制值,如#FF0000
。
我应该用什么来工作?
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
来显示一个十六进制值。
首先让我指出,假设滑块的value
属性返回int,则将int
转换为string
,然后再转换回来。这是没有必要的。代替
byte r = byte.Parse(sliderRed.Value.ToString());
你所需要做的就是
byte r = (byte)sliderRed.Value;
这将绕过字符串转换。将某个东西转换为字符串,然后将其从字符串转换回其他东西,这是一种代码气味,如果没有更好的方法,你应该停下来思考。
将颜色转换为十六进制代码很容易,因为您已经有了R、G和B值。你只需要:
hexCode.Text = string.Format("#{0:X2}{1:X2}{2:X2}", r, g, b);
使用格式字符串"X2"
格式化一个数字会强制它以十六进制呈现,其中包含2位数字。所以你只需要把这三个挨着做,然后把散列符号放在前面。
编辑
如果你在代码的各个部分之间传递颜色数据,你应该总是用System.Drawing.Color
对象来完成,然后每当你需要显示一个十六进制字符串时,就在那时生成它。不要绕过十六进制字符串,并在需要时将其转换回Color
。还记得我说过把东西转换成字符串再转换回来是一种代码气味吗?
如果您发现自己做了很多工作,那么向Color
添加一个扩展方法是有意义的,这样您就可以轻松地调用它。下面是一个实现该方法的类:
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()
方法,在上面的代码中,您可以使用以下方法:
var color = Color.FromArgb(255, r, g, b);
EndColor.Background = new SolidColorBrush(color);
hexcode.Text = color.ToHexString();
hexcode.Text = ((SolidColorBrush)(EndColor.Background)).Color.ToString();
应该这样做。
注意,这里使用的Color.ToString()
是System.Windows.Media.Color.ToString()
实现(因为SolidColorBrush
是System.Windows.Media
类的一部分
System.Drawing.Color.ToString()
将给出不同的结果-请参阅看见https://msdn.microsoft.com/en-us/library/50cb8sdx(v=vs.110).aspx[绘图]vshttps://msdn.microsoft.com/en-us/library/ms606572(v=vs.110).aspx[媒体]
为此,您可以使用ColorHelper库。
RGB到HEX:
using ColorHelper;
...
HEX hex = ColorHeConverter.RgbToHex(new RGB(10, 20, 30));
链接:
- Github
- Nuget