2009-06-11 58 views
2

作爲UI .net庫的一部分,我需要創建角落PNG圖像以對齊DIV的角落以使其具有圓角。在.net中創建一個透明的角落PNG

我想我可以通過以下操作創建一個動態的角落:

  • 創建位圖(比方說,25×25)
  • 填充背景綠色(外面的DIV,我們正在創建的顏色這些對)
  • 呼叫FillEllipse函數()並創建一個50×50圈,與它重疊到25×25位圖
  • 25%最後調用DrawEllipse()與第Ë同一座標繪製邊框

這種運作良好,並創建一個角落的圖像。

的問題是,我想通過顏色FillEllipse函數()稱爲是Color.Transparent。這是因爲DIV可以通過樣式分配背景顏色。

但是因爲FillEllpise()是創造了一個彩色背景上的透明圈,什麼都不會出現。

總結:如何打出透明孔?

我以爲ExcludeClip()會有所幫助,但那似乎只對付Recentangles。

回答

2

這工作:

Dim bmp As New Bitmap(25, 25) 

Using g As Graphics = Graphics.FromImage(bmp) 
    g.Clear(Color.Transparent) 'This is the key point' 
    g.FillEllipse(Brushes.Red, New Rectangle(0, 0, 50, 50)) 
    g.DrawEllipse(Pens.Black, New Rectangle(0, 0, 50, 50)) 
End Using 

bmp.Save("C:\a\out.png", Imaging.ImageFormat.Png) 

編輯:該死,小姐閱讀問題,給了我第二次更改代碼...

EDIT2: 完成,部分你需要的是圖形路徑:

Dim bmp As New Bitmap(25, 25) 

Using g As Graphics = Graphics.FromImage(bmp) 

    Dim gp As New GraphicsPath 

    gp.AddLine(0, 0, 25, 0) 
    gp.AddArc(New Rectangle(0, 0, 50, 50), -90, -90) 
    gp.AddLine(0, 25, 0, 0) 


    g.Clear(Color.Transparent) 

    g.FillPath(Brushes.Red, gp) 
    g.DrawPath(Pens.Black, gp) 

End Using 

bmp.Save("C:\a\out.png", Imaging.ImageFormat.Png) 
+0

我相信這是OP想要的反面 - 外面是透明的,但內部不會。 – samjudson 2009-06-11 11:07:01

+0

是的,只是增加了一些代碼:) – Pondidum 2009-06-11 11:10:44

0

您最好的選擇可能是致電MakeTransparent在生成的位圖上'衝'出你用FillEllipse繪製的任何東西。

1

您可以使用路徑繪製反色。

此示例代碼利用了黑色背景的透明四分之一圓:

graphics.SmoothingMode = SmoothingMode.HighQuality; 
    var path = new GraphicsPath(); 
    int radius = 30; 
    path.AddArc(-radius, -radius, radius * 2, radius * 2, 0, 90); 
    path.AddLine(0, radius, -radius, radius * 2); 
    path.AddLine(-radius, radius * 2, radius * 2, radius * 2); 
    path.AddLine(radius * 2, radius * 2, radius * 2, 0); 
    path.AddLine(radius*2, 0, radius, -radius); 
    path.CloseFigure(); 
    graphics.FillPath(Brushes.Black, path); 

如果不是你想有一個位圖的背景,然後使用路徑剪輯位圖的繪製,而不是填充黑色的背景一個純色的區域。

0

也許試試看吧?使背景透明,繪製邊框,然後用綠色填充角落?