Python SDL/Pygame无法加载带有cx_冻结的PNG图像

Python SDL/Pygame无法加载带有cx_冻结的PNG图像,python,sdl,pygame,cx-freeze,Python,Sdl,Pygame,Cx Freeze,我在Windows上运行Python3.1,并试图通过cx_Freeze将我的Pygame脚本作为可执行文件分发。现在它似乎正在工作,只是exe版本无法加载我的任何图像: Cannot load image: C:\path\to\build\exe.win32-3.1\resources\image.png File is not a Windows BMP file 谷歌发现,当SDL图像库没有被正确包含时,就会发生这种情况。然而,SDL_image.dll和libpng12-0.dll都

我在Windows上运行Python3.1,并试图通过cx_Freeze将我的Pygame脚本作为可执行文件分发。现在它似乎正在工作,只是exe版本无法加载我的任何图像:

Cannot load image: C:\path\to\build\exe.win32-3.1\resources\image.png
File is not a Windows BMP file
谷歌发现,当SDL图像库没有被正确包含时,就会发生这种情况。然而,
SDL_image.dll
libpng12-0.dll
都是由cx_Freeze放在我的构建目录中的,所以在我看来一切都应该很好。为什么它不能加载PNG图像


编辑:我通过将脚本移植到Python2.6并使用py2exe“解决”了这个问题,因为它具有我所需要的一些功能。

测试方法是插入一些Python代码以显示一条消息,指示库已加载,另一条消息指示加载导致错误

try:
   import SDL_image
   print "Loaded SDL_image"
except:
   print "Failed to import SDL_image"

try:
   import libpng
   print "Loaded libpng"
except:
   print "Failed to import libpng"

我多次遇到同样的问题,但我发现了如何处理它

问题 两个可能的依赖项之间似乎存在冲突。JRE中包含了文件
jpeg.dll
(在Windows上,类似于
C:\Program Files\Java\jre6\bin\
),但它是错误的。它应该包含在Pygame目录中,位于Python安装的
C:\Python31\lib\site packages\Pygame\
。我不知道为什么cx\U Freeze更喜欢JRE中的那个

如何修复它?
这很容易。只需将正确的文件(Pygame中的文件)复制到执行cx\U冻结脚本的目录中。当您启动它时,脚本将首先在当前目录中查找,并将找到正确的
jpeg.dll
。您的可执行文件现在应该能够导入PNG图像。

在冻结之前它能工作吗?。如果将文件转换为.bmp会发生什么情况?是的,它在冻结之前工作得非常好。如果我将图像转换为.bmp,它们的加载效果很好,但如果可能的话,我更愿意选择使用.png。我不再使用cx\u freeze(参见上面的编辑),但我会接受这个答案。