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

Graphics.AddRectangle()/DrawPath()绘制异常:1px矩形显示为2px的原因

问题

我尝试使用Graphics.AddRectangle()和Graphics.DrawPath()在指定坐标绘制线条,相关代码如下:

定义路径并添加矩形:

Dim objPath As New GraphicsPath
objPath.AddRectangle(New Rectangle(0, 0, Me.Width, 1))

使用DrawPath执行绘制:

objPen.Width = 1
objGraphics.DrawPath(objPen, objPath)

我预期在图形顶部绘制宽度恰好为1px的矩形线条,但实际绘制出的线条宽度为2px,效果如图所示:
绘制效果

请问该异常行为的原因是什么?

原因解析

这是GDI+的像素渲染规则导致的:

  • GDI+绘制线条时,会以路径的中心线为基准向两侧延伸线条宽度。你创建的矩形范围是Y=0到Y=1,当用宽度为1px的画笔绘制其边框时,边框的中心线会落在Y=0.5的非整数位置。
  • 屏幕像素是整数坐标,GDI+会对这个位置的线条进行插值处理,最终覆盖Y=0和Y=1两行像素,视觉上就变成了2px高度的线条。
  • 另外,默认情况下Graphics对象未启用像素对齐(PixelOffsetMode.Half),这会进一步加剧线条的模糊和尺寸偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:42:40