所以,在我的程序中,我有3个滑块,SliderRed,SliderGreen,sliders。它们的最大值都是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。
发布于 2015-11-26 09:49:11
首先,让我指出,假设您的滑块的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();发布于 2015-11-26 09:44:34
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绘图与https://msdn.microsoft.com/en-us/library/ms606572(v=vs.110).aspx媒体
发布于 2021-04-05 22:32:49
为此,您可以使用ColorHelper库。
RGB到HEX:
using ColorHelper;
...
HEX hex = ColorHeConverter.RgbToHex(new RGB(10, 20, 30));链接:
https://stackoverflow.com/questions/33935057
复制相似问题