Nic*_*ick 4 c# graphics interpolation gdi+ stretch
我的图像宽1px,有些高度.我需要在它的OnPaint事件的控件的整个宽度上绘制这个图像.我得到它绘制,但不正确.看起来当它伸展它时,它实际上并没有填满所有像素.好像插值是关闭的.有没有办法说"停止聪明,只是画出来"?我在图形对象的选项中看不到InterpolationMode.Off或.None.
我可以通过使用宽度为X的图像来确认我实际上绘制了整个宽度,其中X与控件的宽度相同.然后当它绘制时,它正常覆盖整个区域.然而,这个控件一直在调整大小,为了节省内存,所有使用1px宽图像的爵士乐在网络世界中是很正常的.这适用于桌面C#应用程序.有想法该怎么解决这个吗?
Nic*_*ick 10
好的,我想出了神奇的关键词:
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
Run Code Online (Sandbox Code Playgroud)
这与将插值模式设置为NearestNeighbour相结合,可以绘制完整的块.
如果不设置插值模式,您会得到奇怪的混合(预期).在不设置PixelOffsetMode的情况下,最近邻居算法没有邻居可以在空白颜料上进行比较,因此只绘制了一半的图像,宽度的一半.将其设置为偏移一半,将所有内容移动-0.5px,并允许此算法用于块纹理.
| 归档时间: |
|
| 查看次数: |
3211 次 |
| 最近记录: |