python - 我的图片中的 alpha 通道有问题(PyGame)
问题描述
目前,我正在尝试将一张图片粘贴到我的 pygame 游戏中,并且这张图片有一个 alpha 通道(正如你在这句话下面看到的那样)。
但是,由于某种原因,当我使用convert()
or时convert_alpha()
,它没有正确地将带有 alpha 通道的图片放在游戏中......即使我尝试对图片进行一些主要操作,也没有。
这是我尝试编写的代码(对 alpha 通道的操作不起作用):
class Spritesheet:
# utility class for loading and parsing spritesheets
def __init__(self, filename):
self.spritesheet = pygame.image.load(filename).convert()
def get_image(self, x, y, width, height):
# grab an image out of a larger spritesheet
image = pygame.Surface((width, height))
image.fill(pygame.color.Color("black"))
image.blit(self.spritesheet, (0, 0), (x, y, width, height))
image.set_colorkey(pygame.color.Color("black"))
return image
我怎样才能把原来有alpha通道的图片放在上面?
解决方案
确保图像具有透明度信息。如果背景不透明,则无法神奇地得到它(除了背景具有统一的颜色)。见Pygame 图像透明度混淆
您必须使用convert_alpha
而不是convert
:
self.spritesheet = pygame.image.load(filename).convert()
self.spritesheet = pygame.image.load(filename).convert_alpha()
用于convert_alpha()
创建具有按像素提供 alpha 的图像格式的Surface副本。使用 时convert
,会丢失图像的 alpha 通道和透明度。
另外创建一个具有每像素 alpha 格式的Surface 。设置SRCALPHA
标志以创建具有包含每像素 alpha 的图像格式的表面:
image = pygame.Surface((width, height))
image = pygame.Surface((width, height), pygame.SRCALPHA)
class Spritesheet:
# utility class for loading and parsing spritesheets
def __init__(self, filename):
self.spritesheet = pygame.image.load(filename).convert_alpha()
def get_image(self, x, y, width, height):
# grab an image out of a larger spritesheet
image = pygame.Surface((width, height), pygame.SRCALPHA)
image.fill(pygame.color.Color("black"))
image.blit(self.spritesheet, (0, 0), (x, y, width, height))
return image
或者,您可以使用pygame.Surface.subsurface
. 请参阅如何使用 Pygame 裁剪图像?.
class Spritesheet:
# utility class for loading and parsing spritesheets
def __init__(self, filename):
self.spritesheet = pygame.image.load(filename).convert_alpha()
def get_image(self, x, y, width, height):
return image.subsurface(pygame.Rect(x, y, width, height))
推荐阅读
- python - 'list' 对象没有属性 'get' 打印问题
- uwp - 最接近可与 UWP 应用程序一起使用的模式对话框的是什么?
- c# - 如何在 Moq 的 SetUpSequence 上使用回调?
- php - 更新 PHP 函数中的隐藏字段值
- excel - 尝试使用 vb.net 管理 Excel,但我收到“无法从类型转换 COM 对象...”
- python - 无法检测数据框中的 NaN 值(python)
- reactjs - 带有 axios 的 React-map-gl - 错误“无法在未安装的组件上执行 React 状态更新”
- angular - firebase_app__WEBPACK_IMPORTED_MODULE_5__.app(...).functions 不是函数
- python - Pandas Python用另一个行值更新列
- amazon-web-services - 发布到 Beanstalk AWS 后无法访问 web api