如何从 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
我正在寻找一种从快照中刷新相机微型图像的方法。我有这段代码,但在第一次刷新后(不是 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