我正在尝试使用PyGame在Python中创建基本的Pokemon副本。过去,我已经关注了一些有关此库的教程。因此,对于这个项目,我将拥有一个基本的瓷砖结构,无论是草还是水。不允许玩家移动到水板上,但可以在草板上自由移动。我通过本教程获得的Sprite尺寸为64 x 64,并且占据了图块的整个空间,因此边界周围没有透明像素。
但是,出于我的目的,我需要使用自己从精灵表中获得的精灵(64 x 64)。但是,在这种情况下,子画面的图像的上半部分只是透明的,未使用的像素。小精灵每侧的四分之一也是如此。因此,我需要通过沿两个轴将可见像素大小乘以2来批量调整所有这些精灵的大小。 IE,只需按比例因子2增加子画面大小即可。我可以轻松做到这一点, 但是 仍然无效,因为新的子画面大小为128 x 128,并且未使用像素的比例保持不变。
我的问题:
我需要一种可以用于所有9600个Sprite的方法,最好是在Python中使用,即使我不介意其他软件的解决方案。
我尝试在网络上寻找解决方案,但我不知道如何正确表达这个问题。
答案 0 :(得分:3)
创建一个空的pygame.Surface
对象,该对象具有透明的Alpha,尺寸为32x32:
new_image = pygame.Surface((32, 32), pygame.SRCALPHA)
blit
的所需区域(32、16、32、32)形成了新表面上原始的64x64 Sprite(original_image
):
new_image.blit(original_image, (0, 0), (32, 16, 32, 32))
按pygame.transform.smoothscale
缩放新的Surface对象
new_image = pygame.transform.smoothscale(new_image, (64, 64))
答案 1 :(得分:1)
@ Rabbid76的答案是将原件的一部分复制/涂黑,然后放大/缩放,这是一个不错的选择,可能也是我的选择。
但是,如果您已经将它们调整为更大的尺寸,并且只想裁剪现有图像/表面的版本,则可以使用subsurface()。这将为您提供一个真正类似于虚拟表面的表面,该虚拟表面为原始表面的一个子部分提供了一个窗口。它引用与原始曲面相同的像素,因此,如果更改了一个像素,则在另一个曲面中也可以看到该像素。对于您正在做的事情,这似乎不是问题。
答案 2 :(得分:0)
如果这些是图像,则可以使用PIL轻松地完成此操作。
from PIL import Image
忽略此位,它只会生成64x64的测试图像
from scipy import misc
img = misc.face()
img=Image.fromarray(np.uint8(img))
img=img.resize((64,64))
这应该显示一只可爱的小浣熊
接下来,我们可以按照您所描述的那样将缩放比例调整为2(注意:我没有利用这是一个正方形图像这一事实,因此它更具通用性。您可以使用{{ 1}})
imsz=img.size[0]
应该给出2倍的缩放图像
现在我们将其裁剪
imsz=img.size
# resize by factor of 2
img=img.resize((imsz[0]*2,imsz[1]*2))
这给了我们64x64的图像: