我已使用此方法加载图像:
public static int LoadTexture(string file)
{
Bitmap bitmap = new Bitmap(file);
int tex;
GL.GenTextures(1, out tex);
GL.BindTexture(TextureTarget.Texture2D, tex);
System.Drawing.Imaging.BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
System.Drawing.Imaging.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);
bitmap.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);
Console.WriteLine("[ImageDisplay] Loaded image: " + file);
return tex;
}
我需要修改此图片中的像素,所以我使用了这个:
GL.TexSubImage2D(TextureTarget.Texture2D, 0, X, Y, 1, 1, OpenTK.Graphics.OpenGL.PixelFormat.Rgb, PixelType.UnsignedInt, new uint[] { 0xFFFF0000 });
我的问题是,只有非透明像素变为红色,透明像素根本不会改变。
我怎么能解决这个问题?
答案 0 :(得分:3)
OpenTK.Graphics.OpenGL.PixelFormat.Rgb, PixelType.UnsignedInt, new uint[] { 0xFFFF0000 }
您所说的pixel transfer format是GL_RGB
。这意味着3个组件:红色,绿色和蓝色,按顺序。
pixel transfer type为GL_UNSIGNED_INT
,这意味着 每个组件 是无符号整数。因此,您需要为每个像素提供3个无符号整数的数组。
如果您希望每个组件都是未签名的字节,那么您应该将其用作您的类型。你的数组应该是一个无符号字节数组。