kivy - 重新加载由 Kivy 中的相机小部件存储的图像
问题描述
我正在尝试通过 Kivy Camera 小部件捕获图像。一旦它被存储到磁盘中,那么我想在下一页显示该图像。如果图像不清晰,用户有机会捕获新图像并在下一个窗口中再次看到它。我已阅读文档但没有得到解决方案。请帮我解决这个问题。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.camera import Camera
from kivy.uix.image import Image
from kivy.core.image import Image as CoreImage
from kivy.uix.screenmanager import ScreenManager, Screen
import time
Builder.load_string('''
<FirstWindow>:
name: 'first'
FloatLayout:
size: root.width, root.height
Camera:
id: camera
resolution: (640, 480)
play: False
Button:
text: 'Start Camera'
on_press: camera.play = not camera.play
pos_hint: {"x": 0.3, "y": 0.03}
Button:
text: "Capture"
pos_hint: {"x": 0.55, "y": 0.03}
on_press:
root.writeImage()
app.second_window_obj.readImage()
on_release:
root.manager.current = "second"
root.manager.transition.direction = "left"
<Button>
font_size: 15
size_hint: (0.15, 0.07)
color: (0, 0, 0, 1)
background_color: (61/255, 131/255, 191/255, 1)
background_normal: ''
canvas.before:
Color:
rgba: self.background_color
RoundedRectangle:
size: self.size
pos: self.pos
radius: [10]
<SecondWindow>:
name: 'second'
image: image
Screen:
FloatLayout:
Image:
id: image
FloatLayout:
Button:
text: 'Retake'
pos_hint: {"x": 0.3, "y": 0.03}
on_release:
root.manager.current = "first"
root.manager.transition.direction = "right"
Button:
text: "Next"
pos_hint: {"x": 0.55, "y": 0.03}
#on_press:
on_release:
root.manager.current = "third"
root.manager.transition.direction = "left"
<Button>
font_size: 15
size_hint: (0.15, 0.07)
color: (0, 0, 0, 1)
background_color: (61/255, 131/255, 191/255, 1)
background_normal: ''
canvas.before:
Color:
rgba: self.background_color
RoundedRectangle:
size: self.size
pos: self.pos
radius: [10]
''')
class FirstWindow(Screen):
def __init__(self,**kwargs):
super(FirstWindow, self).__init__(**kwargs)
def writeImage(self):
camera = self.ids.camera
camera.export_to_png('IMG.png')
class SecondWindow(Screen):
def __init__(self,**kwargs):
super(SecondWindow, self).__init__(**kwargs)
def readImage(self):
time.sleep(3)
img = self.image
img.remove_from_cache()
self.image.source = 'IMG.png'
self.image.reload()
class StartApp(App):
first_window_obj = FirstWindow()
second_window_obj = SecondWindow()
def build(self):
sm = ScreenManager()
sm.add_widget(FirstWindow(name='first'))
sm.add_widget(SecondWindow(name='second'))
return sm
if __name__ == "__main__":
StartApp().run()
解决方案
推荐阅读
- variables - CakePHP 3.7 - 从控制器访问视图变量
- ms-access - MSAccess:区分两个表?
- laravel - 当用户请求删除 laravel 中的多条记录时,如何检查每个结果的策略?
- c++ - 如何使用 gmock 框架在 C++ 单元测试中模拟 fork 和 execlp 系统调用?
- c# - 带有标签项的用户控件不显示
- rest - 优化 SharePoint 列表检索
- sql - SQL 查询保持平衡
- spring-boot - 在 Spring Boot 中设置 http 获取请求标头
- scala - 为什么 Spark 有时每个内核运行多个任务
- ios - Firebase API observeSingleEvent 有时需要 2-3 分钟才能完成处理程序