Pygame仅显示图片中间区域问题求助
问题解决方法
核心问题分析
- 窗口尺寸超出显示器分辨率:代码直接用图片尺寸设置窗口大小,如果图片分辨率超过当前显示器的最大显示尺寸,PyGame会自动将窗口缩小到显示器能容纳的范围,导致仅显示图片中间区域。
- 白色填充被覆盖:代码中先执行
window.fill((255,255,255))再绘制图片,而JPG格式无透明通道,图片会完全覆盖白色背景,因此看不到填充效果。
修正后的代码
import pygame, sys pygame.init() # 加载地图图片 image = pygame.image.load("map.jpg") img_width, img_height = image.get_size() # 获取显示器最大分辨率 display_info = pygame.display.Info() max_screen_width = display_info.current_w max_screen_height = display_info.current_h # 计算适配窗口的缩放比例,确保图片完整显示 scale = min(max_screen_width / img_width, max_screen_height / img_height) window_width = int(img_width * scale) window_height = int(img_height * scale) # 创建适配显示器的窗口 window = pygame.display.set_mode((window_width, window_height)) pygame.display.set_caption("show picture") # 缩放图片以匹配窗口 scaled_image = pygame.transform.scale(image, (window_width, window_height)) # 主循环 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() window.fill((255, 255, 255)) window.blit(scaled_image, (0, 0)) pygame.display.flip()
额外说明
- 如果想看到白色填充区域,可以将窗口尺寸设置为比图片略大,比如在计算
window_width和window_height时额外增加一些像素,或者使用带透明通道的PNG图片。 - 若需要支持窗口缩放(用户可拖动调整大小),可以将
set_mode的参数改为(window_width, window_height, pygame.RESIZABLE),并在事件循环中处理窗口大小变化的逻辑。
内容的提问来源于stack exchange,提问作者kingananas2.0
相关产品推荐
相关产品推荐

