c# - OpenTK 中的最近邻插值模式存在吗?
问题描述
如果我将低分辨率位图绘制到一个大区域System.Drawing.Graphics
并将其更改InterpolationMode
为InterpolationMode.NearestNeighbor
,它看起来像素化。我想使用 OpenTK 获得相同的结果。
我尝试使用paint.net的最近neightbour函数在resize时将图像文件的大小调整为更高分辨率,我得到了预期的结果。但我不想调整每一个图像的大小,它会占用更多的磁盘空间,我猜应用程序中有更多的 RAM。
这是我用于我的应用程序的纹理加载方法,因此,我的低分辨率图像看起来很模糊:
public static int LoadTexture(Bitmap bmp)
{
GL.Enable(EnableCap.Texture2D);
int tex;
GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
GL.GenTextures(1, out tex);
GL.BindTexture(TextureTarget.Texture2D, tex);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
bmp.UnlockBits(data);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);
return tex;
}
解决方案
过滤器TextureMinFilter
和TextureMagFilter
需要Nearest
代替Linear
。所以你需要替换这些行:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
对这些:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
推荐阅读
- python - 多输入模型的 TensorFlow 数据集(堆叠模型)
- javascript - 基于文件加载的 scss 更改变量
- vue.js - 'instanceof' 的右侧在 Tinymce 中是不可调用的错误
- c - 在这个例子中如何修改我的指针值?
- amazon-quicksight - AWS Quicksight:使用自定义见解显示大文本字段
- python - 列表行中的唯一值,在其他行中不重复
- python - 由点定义的两条任意线之间的中线(即 - 赛道的中线)
- c++ - 删除指向同一内存位置的两个指针之一的问题
- hibernate - Spring Data JPA:一对多映射:SQLIntegrityConstraintViolationException
- node.js - 名称只能包含 URL 友好字符 NPM 安装 @@angular/platform-browser