加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 来自PyOpengl缓冲区的PIL Image.fromstring的大小错误

发布时间:2020-12-20 13:24:25 所属栏目:Python 来源:网络整理
导读:我使用PyOpenGL绘制2D图像.然后我想使用 Python Imaging Library(PIL)将此映像存储到磁盘.我使用GLUT来显示完美的图像.但是当我使用PIL存储图像时,它会提取错误的剪辑.它的大小错误. 这是一个重现效果的最小例子,我还附加输出,使其更清晰,无需运行一些代码.
我使用PyOpenGL绘制2D图像.然后我想使用 Python Imaging Library(PIL)将此映像存储到磁盘.我使用GLUT来显示完美的图像.但是当我使用PIL存储图像时,它会提取错误的剪辑.它的大小错误.

这是一个重现效果的最小例子,我还附加输出,使其更清晰,无需运行一些代码.

from OpenGL.GL import *
from OpenGL.GLUT import *
from PIL import Image

width,height = 640,480

def DrawStuff():
    poly1 = [(0,0),(640,(0,480)]
    color = (0.5,0.4,0.3,0.8)
    glClear(GL_COLOR_BUFFER_BIT)
    glPushMatrix()
    glLineWidth(5.0)

    glColor4f(*color)
    glBegin(GL_POLYGON)
    glVertex2f(poly1[0][0],poly1[0][1])
    glVertex2f(poly1[1][0],poly1[1][1])
    glVertex2f(poly1[2][0],poly1[2][1])    
    glVertex2f(poly1[0][0],poly1[0][1])
    glEnd() # GL_POLYGON

    glPopMatrix()
    glPixelStorei(GL_PACK_ALIGNMENT,1)
    data = glReadPixels(0,width,height,GL_RGBA,GL_UNSIGNED_BYTE)
    image = Image.fromstring("RGBA",(width,height),data)
    image.show()
    image.save('out.png','PNG')
    glutSwapBuffers()


# glut initialization
glutInit(sys.argv)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA)
glutCreateWindow("Draw Polygons")
glutInitWindowSize(width,height)

# set the function to draw
glutDisplayFunc(DrawStuff)

# enable the alpha blending
glEnable(GL_BLEND)
glBlendFunc (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

# prepare for 2D drawing
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0,1)
glDisable(GL_DEPTH_TEST)
glMatrixMode(GL_MODELVIEW)

# start the mainloop
glutMainLoop ()

这就是它在GLUT窗口中的外观以及它应该是什么样子

这就是保存的图像的样子

解决方法

我设法解决了自己的问题.

首先,我尝试了以下解决方案,这可能也会帮助有相关问题的人:
solution1

但是,通过广泛的试验和错误,我发现解决方案更简单.

我只需要交换两行:

glutCreateWindow("Draw Polygons")
glutInitWindowSize(width,height)

glutInitWindowSize(width,height)
glutCreateWindow("Draw Polygons")

显然必须在窗口之前设置大小

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读