如何从 CoreImage.texture 刷新 Image.texture?

How to refresh Image.texture from CoreImage.texture?


我正在寻找一种从快照中刷新相机微型图像的方法。我有这段代码,但在第一次刷新后(不是 reloadMiniatures 线程中的那个)我什么也没得到(黑屏)。
我尝试过其他解决方案,但显示 6x mjpeg 流太重了(而且我真的不需要高帧率)。在 AsyncImage 和将图像保存到文件方面取得了一些成功,但效率不高,我不得不摆脱这个 loading_image。

from kivy.app import App
from kivy.uix.image import Image
import time
import threading
import urllib
from kivy.core.image import Image as CoreImage
from io import BytesIO

class TestApp(App):
    def reloadMiniatures(self):
        while True:
            data = BytesIO(urllib.urlopen("http://10.0.13.206:9000/?action=snapshot").read())
            time.sleep(3)
            self.image.texture = CoreImage(data, ext='jpg').texture

    def build(self):
        data = BytesIO(urllib.urlopen("http://10.0.13.206:9000/?action=snapshot").read())
        self.image = Image()
        self.image.texture = CoreImage(data, ext='jpg').texture

        miniatures = threading.Thread(target=self.reloadMiniatures)
        miniatures.daemon = True
        miniatures.start()

        return self.image

TestApp().run()

您可以尝试使用 Loader 代替:

def load_miniatures(self, *args):
    proxy = Loader.image('http://10.0.13.206:9000/?action=snapshot')
    proxy.bind(on_load=self.receive_miniatures)

def receive_miniatures(self, proxy):
    if proxy.image.texture:
        self.image.texture = proxy.image.texture
    Clock.schedule_once(self.load_miniatures, 0.1)

def build(self):
    self.image = Image()
    self.load_miniatures()
    return self.image