0

私はこの方法で画像をロードしました:

    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 });

私の問題は、不透明なピクセルだけが赤に変わり、透明なピクセルはまったく変わらないということです。

どうすればこれを修正できますか?

4

1 に答える 1

3
OpenTK.Graphics.OpenGL.PixelFormat.Rgb, PixelType.UnsignedInt, new uint[] { 0xFFFF0000 }

あなたが述べるピクセル転送フォーマットGL_RGBはです。つまり、赤、緑、青の3つのコンポーネントがこの順序で表示されます。

ピクセル転送タイプはです。GL_UNSIGNED_INTこれは、各コンポーネントが符号なし整数であることを意味します。したがって、ピクセルごとに3つの符号なし整数の配列を提供することが期待されます。

各コンポーネントを符号なしバイトにしたい場合は、それをタイプとして使用する必要があります。また、配列は符号なしバイトの配列である必要があります。

于 2012-09-05T16:35:59.453 に答える