c# - 在窗口上绘制位图时不需要的抗锯齿

标签 c# .net windows graphics gdi+

我正在将图像渲染到 System.Drawing.Bitmap 中,然后将其绘制到窗口中,但是我可以看到边缘正在消除锯齿。如何防止这种情况?

更多细节。位图是这样创建的:

new Bitmap (this.Width, this.Height, Imaging.PixelFormat.Format32bppArgb)

然后我将像素设置为 Color.Black 或 Color.White。我试过同时使用 Bitmap.SetPixel 和使用 Bitmap.LockBits 将字节直接写入位图数据。

一旦位图准备就绪,我就在我的 Form.OnPaint 覆盖中绘制它:

            pea.Graphics.DrawImage
                ( !this.bitmap
                , this.ClientRectangle
                , new Rectangle (0, 0, this.Width, this.Height)
                , GraphicsUnit.Pixel
                )

每个像素都应该是黑色或白色,但我可以看到边缘处的像素是灰色的。

最佳答案

将 InterpolationMode 属性设置为 NearestNeighbor 并将 PixelOffsetMode 设置为 None。

pea.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
pea.Graphics.PixelOffsetMode = PixelOffsetMode.None; // or PixelOffsetMode.Half

绘制未缩放的位图是最好的。在这种情况下,您可能希望使用 ClientSize.Width 和 Height 属性来初始化位图。您现在通过包含表单的边框和标题使位图太大的可能性很大。我无法从片段中分辨出来。

关于c# - 在窗口上绘制位图时不需要的抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606292/

相关文章:

c# - LINQ 按数字序列排序

C# - 访问继承类中的属性

c# - 如何在 ASP.NET Core 中手动注册 FluentValidation 验证器?

c# - LibSVM 将我所有的训练向量都变成了支持向量,为什么?

windows - 在 Windows 中运行 Play Framework 2.0,出现 NoClassDefFoundError

C# 单例模式

c# - 如何使用 Entity Framework 调用标量值函数并获取结果

c# - 无法使用 NET.TCP 绑定(bind)访问 WCF 服务

windows - docker容器中的mingw没有输出

java - 使用 CREATE_NEW_PROCESS_GROUP 创建主机时,将 Ctrl+C 发送到子进程