Python 使用Intent后,用户输入的图像在kivy中显示为黑色
我希望android应用程序的用户使用绑定到活动的on_activity_result函数输入图像,然后将其显示在kivy图像小部件中。我使用Intent.createChooser作为用户输入:Python 使用Intent后,用户输入的图像在kivy中显示为黑色,python,python-3.x,kivy,kivymd,Python,Python 3.x,Kivy,Kivymd,我希望android应用程序的用户使用绑定到活动的on_activity_result函数输入图像,然后将其显示在kivy图像小部件中。我使用Intent.createChooser作为用户输入: from kivymd.app import MDApp from kivy.lang import Builder from kivy.uix.label import Label from kivy.app import App from kivy.uix.image import Image,
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.app import App
from kivy.uix.image import Image, CoreImage
class MainApp(App):
def build(self):
return Builder.load_file('main.kv')
def set_texture(self, root):
i = root.children[0].children[0] # getting the image widget
##set the image as bytes
with open("./small image.png", "rb") as image:
f = image.read()
bytesArray = bytearray(f)
import io
img = CoreImage(io.BytesIO(bytesArray), ext="png").texture
i.texture = img
def set_texture_after_intent(self):
from jnius import autoclass, cast
from android import activity
activity.bind(on_activity_result=on_activity_result)
PythonActivity = autoclass("org.kivy.android.PythonActivity")
context = PythonActivity.mActivity
currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
AndroidString = autoclass('java.lang.String')
Intent = autoclass('android.content.Intent')
intent = Intent()
intent.setType("image/*")
intent.setAction(Intent.ACTION_GET_CONTENT)
currentActivity.startActivityForResult(
Intent.createChooser(intent, cast('java.lang.CharSequence', AndroidString("Select Picture"))), 1)
def on_activity_result(request, response, data):
#get the image widget
root = App.get_running_app().root
#call same display function
App.get_running_app().set_texture(root)
MainApp().run()
kv文件:
Screen:
id:myscreen
BoxLayout:
Button:
text:'change image normally'
on_release: app.set_texture(root)
Button:
text:'change image after intent'
on_release: app.set_texture_after_intent()
Image:
id: image_id
source:'./big image.png'
如果我改变了图像的纹理而没有从意图中恢复,它通常会在android设备上显示。我认为这有助于了解原因。从意图返回后,以相同方式读取的相同图像显示为黑色。这可能是线程/gl上下文问题,能否尝试将
主线程
装饰器添加到on\u activity\u result
函数中
从kivy.clock导入主线程
...
@主线
def on_activity_结果(请求、响应、数据):
...
这可能是线程/gl上下文问题,能否尝试将主线程
装饰器添加到on\u activity\u result
函数中
从kivy.clock导入主线程
...
@主线
def on_activity_结果(请求、响应、数据):
...