pysdl2访问违规显示图像

时间:2014-03-25 10:06:06

标签: python sdl-2 pysdl2

我试图在Windows机器上开始使用pysdl2。到目前为止,我只是复制并粘贴Hello World tutorial,所以我可以看到它是否真的有效!它不是。

import sys
import sdl2.ext

RESOURCES = sdl2.ext.Resources(__file__, "resources")

sdl2.ext.init()

window = sdl2.ext.Window("Hello World!", size=(640, 580))
window.show()

factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
sprite = factory.from_image(RESOURCES.get_path("testimage.png"))

spriterenderer = factory.create_sprite_render_system(window)
spriterenderer.render(sprite)

processor = sdl2.ext.TestEventProcessor()
processor.run(window)

sdl2.ext.quit()

当我运行程序时,它会短暂显示一个窗口,然后崩溃并显示以下错误:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    spriterenderer.render(sprite)
  File "C:\Python27\lib\site-packages\sdl2\ext\sprite.py", line 643, in render
    surface.SDL_BlitSurface(sprites.surface, None, self.surface, r)
WindowsError: exception: access violation reading 0x03F3B000

虽然地址每次都不同。

这似乎只发生在较大的图像上 - 如果我将图像调整为245 x 245像素或更小,那么它将毫无怨言地显示。我使用Pillow来改进格式支持,并在bmppngjpg中遇到同样的问题。

编辑添加:

今天,我一直在试图理解这一点。我的245x245像素的测试图片将不再起作用,除非我在创建spriterenderer和调用render(sprite)之间做了一些事情 - 我在这些行之间添加了print sprite感兴趣的是看看变量中是否存在实际内容,并且显示出来。注释掉print行并且它失败了。然后我将相同的图像放大500x500并再次出现access violation错误。我不知道它发生了什么。

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的SDL?这是Mercurial最新开发的产品吗?

如果是这样,它可能不稳定并且有一个不允许它在Windows上正常运行的错误,在我的情况下,它在Arch和Windows上都能正常运行,并且版本稳定。

返回的错误是WindowsError,它可能来自DLL文件的使用。

如果您使用的是不稳定版本,请尝试使用稳定版本。它可能会在之后发挥作用。