所以,几个小时前我发现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()
我得到的结果
答案 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()
为了演示/测试目的,我删除了一些代码 代码绝不是完美的,但它希望能让你深入了解它是如何工作的。)