我有一些圖像數據,我blitting到紋理,並顯示在基維。圖像數據寬度相同,比窗口部件高。紋理創建完成後,我想爲其滾動效果設置動畫的y位置。在基維使用blit_buffer和pos參數設置動畫紋理
在此之前,我已經將整個緩衝區佈告到紋理中,併爲小部件本身的位置製作動畫。但是,緩衝區數據有時會大於我的GPU支持的最大紋理尺寸,並且屏幕上不顯示任何內容。
我想一個更好的方法是僅將我需要的源緩衝區的部分blit,並保留與部件相同大小的紋理。
在查看了Kivy的文檔後,我發現有一個pos參數。我想我可以在調用blit_buffer時使用文件ypos的動畫屬性,但是當我嘗試它時,沒有再顯示。
我將pos參數切換到(0,100),以查看我的參數使用是否符合我的預期,但仍未顯示。切換到(0,0)按預期工作。
我正確使用blit_buffer()嗎?只有一部分圖像數據緩衝區溢出的最佳方式是什麼?
編輯:我重新就此問題與一個獨立的腳本:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.image import Image
from kivy.graphics.texture import Texture
from kivy.graphics import Rectangle
import array
class MyWidget(Widget):
def __init__(self, **kwargs):
super(MyWidget, self).__init__(**kwargs)
texture = Texture.create(size=(512, 512))
buf = [int(x * 255/(512*512*3)) for x in range(512*512*3)]
buf = array.array('B', buf).tostring()
texture.blit_buffer(
buf,
colorfmt='rgb',
bufferfmt='ubyte',
pos=(0, 100)
)
with self.canvas:
Rectangle(texture=texture, pos=self.pos, size=(512, 512))
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()