首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DrawEllipse:使用PenAlignment.Inset破坏的抗锯齿

DrawEllipse:使用PenAlignment.Inset破坏的抗锯齿
EN

Stack Overflow用户
提问于 2018-05-29 10:18:04
回答 1查看 108关注 0票数 0

我想用抗锯齿在指定的位图上画一个圆。

代码语言:javascript
复制
SmoothingMode.AntiAlias

问题是,当我使用PenAlignment.Inset时,抗锯齿功能不能正常工作!

相反,使用PenAlignment.Center,它可以正常工作...

有什么解决这个问题的建议吗?

代码语言:javascript
复制
Bitmap layer = new Bitmap(80, 80);
using (Graphics g = Graphics.FromImage(layer))
{
    using (Pen p = new Pen(Color.Black, 4))
    {
        p.Alignment = PenAlignment.Inset;
        g.SmoothingMode = SmoothingMode.AntiAlias;
        g.DrawEllipse(p, new Rectangle(0, 0, layer.Width, layer.Height));
    }
}
pictureBox3.Size = new Size(100, 100);
pictureBox3.Image = layer;

(请注意左图中的bug)

EN

回答 1

Stack Overflow用户

发布于 2018-05-29 13:03:32

缩小边框1/2的笔触宽度应该可以解决这个问题。所谓“放气”,我的意思是将所有4个边向矩形的中心拉1/2笔宽:

代码语言:javascript
复制
float halfPenWidth = p.Width*0.5f;
g.DrawEllipse(p, new RectangleF(halfPenWidth, halfPenWidth, layer.Width - p.Width, layer.Height - p.Width));

或者插入4的硬编码笔宽:

代码语言:javascript
复制
g.DrawEllipse(p, new Rectangle(2, 2, layer.Width - 4, layer.Height - 4));

请注意,必须从矩形的宽度和高度中减去完整的笔宽,以便将右侧和底部拉入1/2笔宽,同时保持矩形在同一点上居中。

使用此代码并将笔对齐居中,1/2的笔划宽度将在椭圆接触矩形的点处绘制在矩形外部,但它仍将绘制在位图内部。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50575461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档