gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:42 29 4
gpt4 key购买 nike

我使用 PyOpenGL 绘制二维图像。然后我想使用 Python 图像库 (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), (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, 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, width, height, 0, 0, 1)
glDisable(GL_DEPTH_TEST)
glMatrixMode(GL_MODELVIEW)

# start the mainloop
glutMainLoop ()

this is how it looks int the GLUT window and how it is supposed to look like这是它在 GLUT 窗口中的样子以及它应该的样子

and this is how the saved image looks like这就是保存的图像的样子

最佳答案

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

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

但后来,通过大量的试验和错误,我发现解决方案要简单得多。

我只需要交换两行:

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

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

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

关于python - 来自 PyOpengl 缓冲区的 PIL Image.fromstring 大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7107707/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com