Если я рисую растровое изображение с низким разрешением в большую область с System.Drawing.Graphics
и меняю его InterpolationMode
на InterpolationMode.NearestNeighbor
, оно выглядит пиксельным.
И я хочу добиться того же результата, используя OpenTK.
Я попытался изменить размеры файлов изображений с более высоким разрешением, используя ближайшую соседнюю функцию paint.net по изменению размера, и получил ожидаемые результаты. Но я не хочу изменять размер каждого отдельного образа, и он занимает больше места на диске, и я предполагаю, что в приложении больше оперативной памяти.
Это метод загрузки текстуры, который я использую для своего приложения, и при этом мое изображение с низким разрешением выглядит размытым:
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;
}