作为UI .net库的一部分,我需要创建角落PNG图像以对齐DIV的角落,以便为其提供圆角。
我认为我可以通过以下方式创建一个动态角落:
效果很好,可以创建角落图像。
问题是我希望 FillEllipse()调用的颜色为 Color.Transparent 。这样,DIV可以通过样式分配背景颜色。
但是因为 FillEllpise()在彩色背景上创建一个透明圆圈,所以不会出现任何内容。
总结:如何打出透明孔?
我认为 ExcludeClip()会有所帮助,但这似乎只能处理Recentangles。
答案 0 :(得分: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)
答案 1 :(得分: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);
如果不是黑色背景而是想要位图背景,则使用路径剪切位图的绘图,而不是用纯色填充区域。
答案 2 :(得分:0)
您最好的选择可能是在生成的位图上调用MakeTransparent以“打出”您使用FillEllipse绘制的任何内容。
答案 3 :(得分:0)
也许反过来尝试一下?使背景透明,绘制边框,然后用绿色填充角落?