Как нарисовать закрашенный круг на графическом объекте в шестнадцатеричном цвете?
Мне нужно нарисовать круг на растровом изображении определенного цвета, заданного в 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 (для Google Earth), и я генерирую много линий с разными цветами Hex. Цвета генерируются математически, и мне нужно сохранить это таким образом, чтобы я мог сделать столько цветов, сколько захочу. Мне нужно сгенерировать значок PNG для каждой из линий точно такого же цвета.
3 ответа
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);
}
}
}
Используйте SolidBrush, созданный с подходящим цветом.
Пример:
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.
Возможно, вам придется вручную разобрать строку цвета.
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);
Как указывает Аарона, если ваш ARGB находится в таком порядке, существует перегрузка для FromARGB, которая принимает все компоненты в одно целое число:
int argb = int.Parse(colorSpec.Substring(1), System.Globalization.NumberStyles.HexNumber);
Color fillColor = Color.FromArgb(argb);