Полноэкранная камера на телефоне kivy
Хочу сделать тестовое приложение на андройд с помощью python (kivy) с использованием камеры.
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
import time
Window.maximize()
Builder.load_string(
'''
<CameraClick>:
orientation: 'vertical'
Button:
text: 'Capture'
size_hint_y: None
height: '48dp'
on_press: root.capture()
Camera:
id: camera
resolution: (640, 480)
allow_stretch: True
keep_ratio: True
play: True
'''
)
class CameraClick(BoxLayout):
def capture(self):
'''
Function to capture the images and give them the names
according to their captured time and date.
'''
camera = self.ids['camera']
timestr = time.strftime("%Y%m%d_%H%M%S")
camera.export_to_png("IMG_{}.png".format(timestr))
print("Captured")
class TestCamera(App):
def build(self):
return CameraClick()
TestCamera().run()
код рабочий. Но изображение с камеры выводится не на весь экран.

Как можно это исправить. Хочу добиться результата, как например в камере у приложения телеграмм и других приложениях. Чтобы выводилось изображение с камеры в полный экран, обрезая часть изображения(что-то вроде маштабирования) не знаю как это еще описать. Что-то вроде object-fit: cover; из css. Знаю что можно сделать keep_ratio: False. И изображение растнется на весь экран, но будет искажено.
Ответы (2 шт):
Попробуйте после команды запуска вставить следующее
... TestCamera().run()
Window.fullscreen = True
Чтобы отобразить предварительный просмотр камеры в полноэкранном режиме с сохранением соотношения сторон, вы можете использовать виджет Scatter в Kivy, который позволяет применять произвольные преобразования к его дочерним элементам. Вы можете обернуть виджет камеры в виджет Scatter и установить для его свойств do_scale и do_translation значение False, чтобы отключить масштабирование и перевод, но разрешить вращение.
Вот обновленная версия вашего кода, реализующего виджет Scatter: `
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from kivy.uix.scatter import Scatter
import time
Window.maximize()
Builder.load_string(
'''
<CameraClick>:
orientation: 'vertical'
Button:
text: 'Capture'
size_hint_y: None
height: '48dp'
on_press: root.capture()
Scatter:
do_scale: False
do_translation: False
Camera:
id: camera
resolution: (640, 480)
allow_stretch: True
keep_ratio: True
play: True
'''
)
class CameraClick(BoxLayout):
def capture(self):
camera = self.ids['camera']
timestr = time.strftime("%Y%m%d_%H%M%S")
camera.export_to_png("IMG_{}.png".format(timestr))
print("Captured")
class TestCamera(App):
def build(self):
return CameraClick()
TestCamera().run()
`