在 WPF 中获取十六进制颜色代码时出错
Error getting hexadecimal color code in WPF
我对 HEX 代码和 WPF 有很大的疑问。我正在写一个简单的调色板制作工具。
该应用程序要求您将默认颜色设置为颜色基色,它将该颜色转换为调色板,并将该调色板的每种颜色添加到列表框中。当你双击一个项目时,它会复制剪贴板中的 RGB 代码,但是当我将该代码粘贴到网页或 google 中时,结果完全不同。
这是复制剪贴板中的 HEX 代码的代码。
private void box_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
System.Windows.Controls.ListBox list = sender as ListBox;
ListBoxItem item = list.SelectedItem as ListBoxItem;
System.Windows.Clipboard.SetText(item.Background.ToString());
}
你能帮帮我吗?谢谢
您混淆了两种不同的颜色模型。 RGB with a channel for red, green and blue and there is also ARGB,它有一个额外的 alpha 通道,用于指定颜色的不透明程度。
- ##FF0000 是RGB中红色的十六进制表示
- ##FFFF0000 是 完全不透明 红色在 ARGB
中的十六进制表示
Color
structure will return a hex string in ARGB format, from the documentation:
The string representation of the color. The default implementation represents the Byte values in hex form, prefixes with the # character, and starts with the alpha channel. For example, the ToString() value for AliceBlue is #FFF0F8FF.
您 HTML 颜色选择器会误解颜色字符串,因为它将前 6 个十六进制字符解释为 RGB 并忽略其余部分。因此,Alpha 通道将用于红色,红色用于绿色,绿色用于蓝色,蓝色将被忽略。您可以通过附加任意数字或删除前两个(字母)十六进制字符来测试它,颜色将是正确的。
您可以通过自己格式化十六进制字符串来解决这个问题。 format specifier X2
将显示十六进制数的两个字符,即使该值可以用一个字符表示,例如10
因为 A
将是 0A
.
private void box_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
System.Windows.Controls.ListBox list = sender as ListBox;
ListBoxItem item = list.SelectedItem as ListBoxItem;
var brush = (SolidColorBrush)item.Background;
var color = brush.Color;
var hexColor = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
System.Windows.Clipboard.SetText(hexColor);
}
我对 HEX 代码和 WPF 有很大的疑问。我正在写一个简单的调色板制作工具。
该应用程序要求您将默认颜色设置为颜色基色,它将该颜色转换为调色板,并将该调色板的每种颜色添加到列表框中。当你双击一个项目时,它会复制剪贴板中的 RGB 代码,但是当我将该代码粘贴到网页或 google 中时,结果完全不同。
这是复制剪贴板中的 HEX 代码的代码。
private void box_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
System.Windows.Controls.ListBox list = sender as ListBox;
ListBoxItem item = list.SelectedItem as ListBoxItem;
System.Windows.Clipboard.SetText(item.Background.ToString());
}
你能帮帮我吗?谢谢
您混淆了两种不同的颜色模型。 RGB with a channel for red, green and blue and there is also ARGB,它有一个额外的 alpha 通道,用于指定颜色的不透明程度。
- ##FF0000 是RGB中红色的十六进制表示
- ##FFFF0000 是 完全不透明 红色在 ARGB 中的十六进制表示
Color
structure will return a hex string in ARGB format, from the documentation:
The string representation of the color. The default implementation represents the Byte values in hex form, prefixes with the # character, and starts with the alpha channel. For example, the ToString() value for AliceBlue is #FFF0F8FF.
您 HTML 颜色选择器会误解颜色字符串,因为它将前 6 个十六进制字符解释为 RGB 并忽略其余部分。因此,Alpha 通道将用于红色,红色用于绿色,绿色用于蓝色,蓝色将被忽略。您可以通过附加任意数字或删除前两个(字母)十六进制字符来测试它,颜色将是正确的。
您可以通过自己格式化十六进制字符串来解决这个问题。 format specifier X2
将显示十六进制数的两个字符,即使该值可以用一个字符表示,例如10
因为 A
将是 0A
.
private void box_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
System.Windows.Controls.ListBox list = sender as ListBox;
ListBoxItem item = list.SelectedItem as ListBoxItem;
var brush = (SolidColorBrush)item.Background;
var color = brush.Color;
var hexColor = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
System.Windows.Clipboard.SetText(hexColor);
}