2010-04-04 54 views
3

我需要在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地球),並且我生成了很多帶有不同十六進制顏色的行。顏色是數學生成的,我需要保持這種方式,所以我可以製作儘可能多的顏色。我需要爲每一條顏色完全相同的線條生成一個PNG圖標。

+0

我假設這段代碼只是一個例子,但如果它與生產代碼有任何相似之處,那麼您應該知道它有資源泄漏。你需要處理'Graphics'和'Bitmap'對象。 – Aaronaught 2010-04-04 13:53:35

回答

11

ColorTranslator.FromHtml會給你相應的System.Drawing中顏色:

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); 
     } 
    } 
} 
+4

另外,請記住處置任何圖形資源。 – rein 2010-04-04 14:06:35

2

使用與適當的Color構建的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. 
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); 
+1

'Color.FromArgb'有一個需要'int'的重載,所以不需要解析單個字節;一個'int.Parse'就足夠了。 – Aaronaught 2010-04-04 13:51:48