图像不是blitting

时间:2016-03-29 15:09:51

标签: python pygame

我正在构建一个简单的程序来将多个图像拼接在一起。有些图像非常大。但是,我无法使用以下代码:

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。任何帮助将不胜感激。

2 个答案:

答案 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: