5

我有一个 1px 宽和一些高度的图像。我需要在控件的 OnPaint 事件的整个宽度上绘制此图像。我让它画出来,但不正确。似乎当它拉伸它时,它实际上并没有填充所有像素。好像插值已关闭。有没有办法说“停止聪明,已经画出来了”?我在图形对象的选项中看不到 InterpolationMode.Off 或 .None。

我可以通过使用宽度为 X 的图像确认我实际上绘制了整个宽度,其中 X 与控件的宽度相同。然后当它绘制时,它照常覆盖整个区域。然而,这个控件一直在调整大小,为了节省内存和使用 1px 宽图像的所有爵士乐在网络世界中是很正常的。这是针对桌面 C# 应用程序的。有想法该怎么解决这个吗?

4

2 回答 2

13

好的,我想出了神奇的关键字:

g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;

再加上将插值模式设置为 NearestNeighbour,可以绘制完整的块。

如果不设置插值模式,你会得到奇怪的混合(预期)。在不设置 PixelOffsetMode 的情况下,最近邻算法在空白绘画上没有可比较的邻居,因此仅绘制一半图像,一半宽度。将其设置为偏移一半,将所有内容移动 -0.5px,并允许此算法适用于块纹理。

于 2010-12-13T18:03:32.660 回答
0

在这种情况下,您要使用 InterpolationMode.NearestNeighbor。

于 2010-12-10T20:42:35.183 回答