You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DrawEllipse绘制与Bitmap同尺寸的圆时边缘被裁剪的原因

为什么DrawEllipse绘制的圆边缘被裁剪了?

这个问题我太熟了,根源就在Pen的宽度和DrawEllipse的绘制逻辑上!

你用了宽度为4的Pen来画圆,但DrawEllipse的规则是:笔的中线会严格沿着你指定的Rectangle边界走。也就是说,4像素宽的笔,会有2像素落在矩形外面,2像素在矩形内部。而你的Bitmap刚好和这个矩形尺寸完全一致(80x80),那超出Bitmap范围的那2像素自然就被裁剪掉了,所以你看到的圆边缘缺了一块。

解决办法很直接,只要给Pen留出足够的绘制空间就行:把用来画圆的Rectangle尺寸调整一下——X和Y坐标各加上笔宽的一半,宽度和高度各减去整个笔宽,这样整个Pen的宽度都能被Bitmap容纳,不会超出边界。

修改后的代码如下:

Bitmap layer = new Bitmap(80, 80);
using (Graphics g = Graphics.FromImage(layer))
{
    int penWidth = 4;
    using (Pen p = new Pen(Color.Black, penWidth))
    {
        int offset = penWidth / 2;
        // 调整矩形,让Pen的绘制范围完全在Bitmap内部
        g.DrawEllipse(p, new Rectangle(offset, offset, layer.Width - penWidth, layer.Height - penWidth));
    }
}
pictureBox3.Size = new Size(100, 100);
pictureBox3.Image = layer;

附上你提供的裁剪效果截图:
绘制椭圆边缘被裁剪的效果

内容的提问来源于stack exchange,提问作者user3605220

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:42:14