我想在指定DrawEllipse
上绘制一个带有Bitmap
的圆圈,其大小与位图相同,但结果是圆圈在边缘处显示为剪裁。
为什么会出现这个问题?
Bitmap layer = new Bitmap(80, 80);
using (Graphics g = Graphics.FromImage(layer))
{
using (Pen p = new Pen(Color.Black, 4))
{
g.DrawEllipse(p, new Rectangle(0, 0, layer.Width, layer.Height));
}
}
pictureBox3.Size = new Size(100, 100);
pictureBox3.Image = layer;
答案 0 :(得分:2)
默认情况下,Pen有一个PenAlignment.Center。
这意味着它的一半将在边界矩形之外绘制。
您可以通过将其更改为PenAlignment.Inset
来避免此问题:
using (Pen p = new Pen(Color.Black, 4) { Alignment = PenAlignment.Inset})
{
g.DrawEllipse(p, new Rectangle(0, 0, layer.Width, layer.Height));
}
更新:如果要为图形对象打开平滑,则笔划两侧需要1或2个额外像素作为抗锯齿像素。现在无法避免使用较小的边界矩形。但是......:
Rectangle rect = new Rectangle(Point.Empty, layer.Size);
rect.Inflate(-1, -1); // or -2
..应该做..