首页 > 解决方案 > 重新加载由 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()

标签: kivypython-3.8

解决方案


推荐阅读