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
相关产品推荐
相关产品推荐

