我有一个 1px 宽和一定高度的图像。我需要在其 OnPaint 事件上在控件的整个宽度上绘制此图像。我可以绘制它,但不正确。看起来当它拉伸它时,它实际上并没有填充所有像素。就好像插值关闭一样。有没有办法说“别再自作聪明了,直接画出来吧”?我在图形对象的选项中没有看到 InterpolationMode.Off 或 .None。
我可以确认我实际上使用宽度为 X 的图像绘制了完整宽度,其中 X 与控件的宽度相同。然后当它绘制时,它会像平常一样覆盖整个区域。然而,这个控件一直在调整大小,为了节省内存,使用 1 像素宽的图像在网络世界中是很正常的。但这是针对桌面 C# 应用程序的。有想法该怎么解决这个吗?
好吧,我找到了神奇的关键字:
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
再加上将插值模式设置为“NearestNeighbour”,就可以绘制完整的块。
如果不设置插值模式,您会得到奇怪的混合(预期)。
如果不设置 PixelOffsetMode,最近邻算法在空白涂料上没有可比较的邻居,因此仅绘制一半图像、一半宽度。将其设置为偏移一半,将所有内容移动 -0.5px,并允许该算法适用于块纹理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)