如果我使用System.Drawing.Graphics
将低分辨率位图绘制到大区域并将其InterpolationMode
更改为InterpolationMode.NearestNeighbor
,则它看起来像是像素化的。
而且我想使用OpenTK达到相同的结果。
我尝试使用paint.net的最近的eightbour函数在调整大小时将图像文件的大小调整为更高的分辨率,并且得到了预期的结果。但是我不想调整每个映像的大小,它占用了磁盘上更多的空间,并且我猜想应用程序中会有更多的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;
}
答案 0 :(得分:0)
对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);