加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – winforms图像与最近邻居过滤图像的剪切边缘

发布时间:2020-12-15 04:35:22 所属栏目:百科 来源:网络整理
导读:我正在写一个Chip8模拟器/解释器.这很棒.到目前为止,我需要一个用户界面来玩一些游戏并观看这个糟糕的杰克逊.我第一次遇到一个问题,即在屏幕上绘制帧缓冲区(这只是一个位图)非常模糊.在搞清楚之后我需要将插值模式设置为最近邻,它看起来好多了,但是看起来图
我正在写一个Chip8模拟器/解释器.这很棒.到目前为止,我需要一个用户界面来玩一些游戏并观看这个糟糕的杰克逊.我第一次遇到一个问题,即在屏幕上绘制帧缓冲区(这只是一个位图)非常模糊.在搞清楚之后我需要将插值模式设置为最近邻,它看起来好多了,但是看起来图像的边缘要么被剪裁,要么我在工作时误解了插值.这是一个截图.

您在顶部,左侧和右侧看到的边缘应以“整个”白色像素结束,与您看到的图案保持一致.特别容易看到左上角的问题,应该是一个完整的白色像素.

被放大的图像是64×32,并且正在使用普通图形对象绘制,如下所示:(忽略64 * 6,我知道它很有趣)

g.DrawImage (cpu.raster,64 * 6,32 * 6);

其中“cpu.raster”是模拟器渲染游戏的位图.我会发布剩下的代码,但这看起来很标准.甚至与图形相关的其他代码是插值/平滑模式,其设置如下:

g = this.CreateGraphics ();
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
        this.DoubleBuffered = true;

我应该注意另一个设置来防止这种情况吗?我试着减小绘制图像的大小,想到表格可能是以某种方式剪裁它,但事实并非如此,图像在截图中看到的边缘处结束.

解决方法

在您设置InterpolationMode和SmoothingMode的代码中,添加以下行:
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;

这将修复您正在绘制的内容的顶部和左侧.至于右侧,请确保您的表单足够宽以容纳图像.您指定的宽度为64 * 6 = 384,但在屏幕截图中,您的表单显示有377像素的显示区域.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读