在.net中创建透明的角点PNG
作为UI.net库的一部分,我需要创建角点PNG图像以与DIV的角点对齐,从而使其成为圆角 我认为我可以通过以下操作创建动态角点:在.net中创建透明的角点PNG,.net,css,gdi+,.net,Css,Gdi+,作为UI.net库的一部分,我需要创建角点PNG图像以与DIV的角点对齐,从而使其成为圆角 我认为我可以通过以下操作创建动态角点: 创建位图(例如25 x 25) 填充背景绿色(我们为其创建的DIV外部的颜色) 调用FillEllipse()并创建一个50 x 50的圆,其中25%重叠到25 x 25位图中 最后使用相同的坐标调用drawerlipse(),以绘制边界 这样做效果很好,可以创建一个角点图像 问题是我想将FillEllipse()调用的颜色设置为Color.Transparen
- 创建位图(例如25 x 25)
- 填充背景绿色(我们为其创建的DIV外部的颜色)
- 调用FillEllipse()并创建一个50 x 50的圆,其中25%重叠到25 x 25位图中
- 最后使用相同的坐标调用drawerlipse(),以绘制边界
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)
最好的方法可能是调用生成的位图来“打孔”使用FillEllipse绘制的任何内容。您可以使用路径绘制反转 此示例代码在黑色背景上绘制一个透明的四分之一圆:
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);
如果您想要位图背景,而不是黑色背景,则使用路径剪裁位图的图形,而不是用纯色填充区域。也许可以反过来试试?使背景透明,绘制边框,然后用绿色填充角落?我认为这与OP想要的正好相反-外部透明,但内部不透明。这两种方法都适用,非常好;)谢谢你的回答,我已经给了安迪答案,因为代码更简单。是的,我以前从未使用过GraphicsPath,所以它可能更干净。