1

我知道glGetTexImageOpenGL 函数允许从整个纹理中读取像素。是否有一个OpenGL函数可以做同样的事情但允许传递一个矩形来限制读取的像素?

4

1 回答 1

3

这是我最终在 OpenTK 中完成的方式(应该很容易转换为 C++ 或其他支持 OpenGL / OpenGL ES 的语言):

public Bitmap GetBitmap()
{
    int fboId;
    GL.Ext.GenFramebuffers(1, out fboId);
    CheckGLError();
    GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, fboId);
    CheckGLError();
    GL.Ext.FramebufferTexture2D(FramebufferTarget.FramebufferExt, FramebufferAttachment.ColorAttachment0Ext, TextureTarget.Texture2D, TextureId, 0);
    CheckGLError();

    Bitmap b = new Bitmap(Width, Height);
    var bits = b.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    GL.ReadPixels(Rect.Left, Rect.Top, Width, Height, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bits.Scan0);
    GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, 0);
    GL.Ext.DeleteFramebuffers(1, ref fboId);
    b.UnlockBits(bits);

    return b;
}
于 2013-02-19T05:11:58.907 回答