图像由“pygame.Surface”对象表示。可以从具有以下内容的图像创建表面pygame.image.load
:
my_image_surface = pygame.load.image('my_image.jpg')
但是,pygame 文档指出:
返回的 Surface 将包含与其来源文件相同的颜色格式、颜色键和 alpha 透明度。您经常需要convert()
不带参数调用,以创建一个可以在屏幕上更快绘制的副本。
对于 alpha 透明度,就像在 .png 图像中一样,convert_alpha()
在加载后使用该方法,以便图像具有每个像素的透明度。
使用以下convert_alpha()
方法以获得最佳性能:
alpha_image_surface = pygame.load.image('my_icon.png').convert_alpha()
可以使用该方法在另一个Surface上绘制或混合一个Surface 。blit
blit 的第一个参数是应该绘制的Surface 。第二个参数是表示左上角的元组 ( x , y ) 或矩形。对于矩形,只考虑矩形的左上角。需要指出的是,窗口分别显示也由一个Surface表示。因此,在窗口中绘制 Surface 与在Surface上绘制Surface相同:
window_surface.blit(image_surface, (x, y))
window_surface.blit(image_surface,
image_surface.get_rect(center = window_surface.get_rect().center))
最小的例子: repl.it/@Rabbid76/PyGame-LoadTransparentImage
import pygame
pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()
pygameSurface = pygame.image.load('Porthole.png').convert_alpha()
background = pygame.Surface(window.get_size())
ts, w, h, c1, c2 = 50, *window.get_size(), (160, 160, 160), (192, 192, 192)
tiles = [((x*ts, y*ts, ts, ts), c1 if (x+y) % 2 == 0 else c2) for x in range((w+ts-1)//ts) for y in range((h+ts-1)//ts)]
for rect, color in tiles:
pygame.draw.rect(background, color, rect)
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.blit(background, (0, 0))
window.blit(pygameSurface, pygameSurface.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()