我正在构建一个简单的程序来将多个图像拼接在一起。有些图像非常大。但是,我无法使用以下代码:
out = py.Surface((width, height), flags=py.SRCALPHA)
pos = 0
for i in images:
r = out.blit(i, (0, pos))
print(pos, r)
pos += i.get_rect().size[1]
理论上,下面的代码应该从images
列表中获取加载的图像,并将它们blit到预定宽度和高度的输出表面(根据图像的组合高度和最大值计算) )。但事实并非如此。
0 <rect(0, 0, 256, 44096)>
44096 <rect(0, 0, 0, 0)>
46112 <rect(0, 0, 0, 0)>
48128 <rect(0, 0, 0, 0)>
50144 <rect(0, 0, 0, 0)>
52160 <rect(0, 0, 0, 0)>
从程序输出中可以看出,第一个(非常大)的图像很好,但其他图像没有。
我无法弄清楚为什么会这样。此脚本的完整代码为here。任何帮助将不胜感激。
答案 0 :(得分:1)
您发布的代码与链接中的代码不同,但在我的测试中它可以正常运行。
我会将它简化为类似的东西:
width = max(i.get_rect().width for i in images)
height = sum(i.get_rect().height for i in images)
out = py.Surface((width, height), flags=py.SRCALPHA)
pos = 0
for i in images:
r = out.blit(i, (0, pos))
pos += i.get_rect().height
也许您实际代码中的高度计算有点偏差?如果blit
返回空的Rect
,则表示目标Surface
上无法绘制任何内容。
答案 1 :(得分:-2)
部分问题是:
r = out.blit(i, (0, pos))
您总是将图像blitting到x = 0。宽度有多宽?您需要执行以下操作:
Xpos = i.get_rect().size[0]
Ypos = i.get_rect().size[1]
然后在blitting时使用它们。然后将它们与宽度进行比较。此外,这个代码是否有效(整个循环),因为在你添加了几个大图像后,宽度变量会很大,所以除非其他图像非常宽,否则我看不出它是如何工作的:if i.get_rect().size[0] > width: