如何使用Pyglet在Python中使gif动画与全屏窗口大小匹配?

时间:2017-05-07 12:49:31

标签: python python-2.7 pyglet

所以,几个小时前我发现Pyglet对我来说最适合渲染gif动画,所以我在这里做了新的。我的问题是动画gif在全屏窗口中呈现原始大小,我需要让它匹配,但我无法弄清楚我应该怎么做,有什么帮助吗?我的代码:

import sys

import pyglet
from pyglet.window import Platform

if len(sys.argv) > 1:
    animation = pyglet.image.load_animation(sys.argv[1])
    bin = pyglet.image.atlas.TextureBin()
    animation.add_to_texture_bin(bin)
else:
    animation = pyglet.resource.animation('gaben.gif')
    sprite = pyglet.sprite.Sprite(animation)

screen = Platform().get_default_display().get_default_screen()
window = pyglet.window.Window(width=screen.width, height=screen.height)
window.set_fullscreen(True)

pyglet.gl.glClearColor(1, 1, 1, 1)

@window.event
def on_draw():
    window.clear()
    sprite.draw()

pyglet.app.run()

我得到的结果

enter image description here

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用精灵对象.scale 它能够根据图像的原始尺寸按比例缩放图像,如果您自己调整图像大小,则不必担心映射数据或填充像素间隙。

为了帮助您实现目标,这是一个简单的实施示例: (它看起来像这样:https://youtu.be/Ly61VvTZnCU

import pyglet
from pyglet.window import Platform

monitor = Platform().get_default_display().get_default_screen()

sprite = pyglet.sprite.Sprite(pyglet.resource.animation('anim.gif'))

H_ratio = max(sprite.height, monitor.height) / min(sprite.height, monitor.height)
W_ratio = max(sprite.width, monitor.width) / min(sprite.width, monitor.width)

sprite.scale = min(H_ratio, W_ratio) # sprite.scale = 2 would double the size.
                                     # We'll upscale to the lowest of width/height
                                     # to not go out of bounds. Whichever
                                     # value hits the screen edges first essentially.

window = pyglet.window.Window(width=monitor.width, height=monitor.height, fullscreen=True)

pyglet.gl.glClearColor(1, 1, 1, 1)

@window.event
def on_draw():
    window.clear()
    sprite.draw()

pyglet.app.run()

为了演示/测试目的,我删除了一些代码 代码绝不是完美的,但它希望能让你深入了解它是如何工作的。)