GLUTで表示中の画面をキャプチャする

[,h200]

前回C言語で書いたコードをPyOpenGLとPILライブラリを使って書いてみた。PILを使うと前回と異なりpng形式だけではなくbmp,jpeg,tiff形式などPILの対応する形式であれば何でも保存できる。
使い方は同じで、コードをコピペして適当な場所でcapture関数を呼び出せば使える。

やっぱりpython使うと簡潔でいいなあ。

from PIL import Image
from PIL import ImageOps
def capture():
    width = glutGet(GLUT_WINDOW_WIDTH)
    height = glutGet(GLUT_WINDOW_HEIGHT)
    # キャプチャ
    glReadBuffer(GL_FRONT)
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
    data = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)
    # 画像を保存
    image = Image.fromstring("RGBA", (width, height), data)
    image = ImageOps.flip(image) # 上下反転
    image.save("output.png")
    image.save("output.jpg")
    image.save("output.tiff")
    #image.save("output.bmp") # RGBAは不可