首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决此错误: TypeError:参数1必须是pygame.Surface,而不是PngImageFile

如何解决此错误: TypeError:参数1必须是pygame.Surface,而不是PngImageFile
EN

Stack Overflow用户
提问于 2014-02-20 13:34:44
回答 1查看 1.6K关注 0票数 3

我过去经常使用Python 2.7pygame,为了将PNG和blit加载到表面,这段代码就足够了:

代码语言:javascript
运行
复制
sprites = pygame.image.load('sprites.png')
background.blit(sprites, (0, 0), rect)

现在我使用Python 3,这意味着我需要加载PIL来处理PNG文件。我的新代码如下所示:

代码语言:javascript
运行
复制
from PIL import Image
sprites = Image.open('sprites.png')
background.blit(sprites, (0, 0), rect)

但是,当我运行新代码时,会在最后一行得到以下错误:

TypeError:参数1必须是pygame.Surface,而不是PngImageFile

因此,sprites变量是一个PngImageFilebackground.blit()需要一个pygame.Surface对象作为输入:

  • 我应该把PngImageFile转换成pygame.Surface吗?我找不到任何办法来做这个。
  • 是否有更好的方法将PIL图像blitpygame.Surface对象?

我在StackOverflow上努力寻找答案,所以我很确定这不是一个重复的问题。欢迎提出任何意见或建议。

EN

回答 1

Stack Overflow用户

发布于 2014-02-20 13:53:19

代码语言:javascript
运行
复制
from PIL import Image
sprites = Image.open('sprites.png')
pygameImage = pygame.image.fromstring(str(buffer(sprites)), win.size, 'RGB', False)
background.blit(pygameImage, (0, 0), rect)

由于我在PIL上没有任何运气就运行了Python3,所以我不完全确定这是否会开箱即用。因为您需要获取sprites对象的文本表示,而不是数据数组。

下面可以帮助您将PIL对象转换为字符串?

或者简单地尝试:

代码语言:javascript
运行
复制
from PIL import Image
sprites = pygame.image.load(Image.open('sprites.png'))
background.blit(sprites, (0, 0), rect)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21909435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档