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窗口中的外观以及它应该是什么样子 这就是保存的图像的样子 解决方法
我设法解决了自己的问题.
首先,我尝试了以下解决方案,这可能也会帮助有相关问题的人: 但是,通过广泛的试验和错误,我发现解决方案更简单. 我只需要交换两行: glutCreateWindow("Draw Polygons") glutInitWindowSize(width,height) 至 glutInitWindowSize(width,height) glutCreateWindow("Draw Polygons") 显然必须在窗口之前设置大小 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |