我需要在Hex中给出的特定颜色的位图上画一个圆圈。 “画笔”类仅提供具有名称的特定颜色。
Bitmap bitmap = new Bitmap(20, 20);
Graphics g = Graphics.FromImage(bitmap);
g.FillEllipse(Brushes.AliceBlue, 0, 0, 19, 19); //The input parameter is not a Hex
//g.FillEllipse(new Brush("#ff00ffff"), 0, 0, 19, 19); <<This is the kind of think I need.
有没有办法做到这一点?
确切的问题: 我正在生成KML(对于谷歌地球),我正在生成许多具有不同十六进制颜色的线条。颜色是以数学方式生成的,我需要保持这种颜色,这样我就能制作出我想要的颜色。我需要为每条完全相同颜色的线生成一个PNG图标。
答案 0 :(得分:12)
ColorTranslator.FromHtml
将为您提供相应的System.Drawing.Color:
using (Bitmap bitmap = new Bitmap(20, 20))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
using (Brush b = new SolidBrush(ColorTranslator.FromHtml("#ff00ffff")))
{
g.FillEllipse(b, 0, 0, 19, 19);
}
}
}
答案 1 :(得分:2)
使用SolidBrush构造适当的{{3p>
示例:
Color color = Color.FromArgb(0x00,0xff,0xff,0x00); // Channels: Alpha, Red, Green, Blue.
SolidBrush brush = new SolidBrush(color);
// Use this brush in your calls to FillElipse.
答案 2 :(得分:0)
您可能需要手动解析颜色字符串。
string colorSpec = "#ff00ffff";
byte alpha = byte.Parse(colorSpec.Substring(1,2), System.Globalization.NumberStyles.HexNumber);
byte red = byte.Parse(colorSpec.Substring(3, 2),System.Globalization.NumberStyles.HexNumber);
byte green = byte.Parse(colorSpec.Substring(5, 2), System.Globalization.NumberStyles.HexNumber);
byte blue = byte.Parse(colorSpec.Substring(7, 2), System.Globalization.NumberStyles.HexNumber);
Color fillColor = Color.FromArgb(alpha, red, green, blue);
正如Aaronaught指出的那样,如果您的ARGB按此顺序排列,则FromARGB会出现超载,它接受一个整数中的所有组件:
int argb = int.Parse(colorSpec.Substring(1), System.Globalization.NumberStyles.HexNumber);
Color fillColor = Color.FromArgb(argb);