# Capture image from the OpenGL buffer
buffer = ( GLubyte * (3*window.width*window.height) )(0)
glReadPixels(0, 0, window.width, window.height, GL_RGB, GL_UNSIGNED_BYTE, buffer)
# Use PIL to convert raw RGB buffer and flip the right way up
image = Image.fromstring(mode="RGB", size=(window.width, window.height), data=buffer)
image = image.transpose(Image.FLIP_TOP_BOTTOM)
# Save image to disk
image.save('jpap.png')
必须首先创建正确类型的数组,然后将其传递给glReadPixels:
要对此进行测试,请在Pyglet“opengl.py”示例中插入以下内容:
现在,每当您在应用程序窗口中单击某个位置时,您应该会看到鼠标光标下像素的颜色代码。
我可以使用
glReadPixels(...)
获得整个帧缓冲区,然后使用PIL将其写入文件:我对alpha不感兴趣,但我相信你可以很容易地添加进去。
我被迫使用
glReadPixels(...)
,而不是Pyglet代码因为使用
save(...)
的输出与我在窗口中看到的不同。(多采样缓冲区丢失?)您可以使用PIL库,下面是我用来捕获这样一个图像的代码片段:
我想包含alpha通道应该是非常直接的(可能只是用RGBA替换RGB,但我没有尝试过)。
编辑:我不知道pyglet OpenGL API与PyOpenGL API是不同的。我想必须修改上面的代码,才能使用缓冲区作为第七个参数(符合不那么pythonic的pyglet风格)。
相关问题 更多 >
编程相关推荐