Для управления высотой и шириной кадра камеры в пакете camera в Flutter, вам необходимо использовать параметры pictureSize
и previewSize
.
1. Прежде всего, вам нужно создать экземпляр класса CameraController
, чтобы получить доступ к камере:
CameraController controller;
2. В методе onCreate
вашей основной виджета (например, метод initState
виджета Stateful), вы должны инициализировать ваш контроллер камеры и задать настройки:
void initState() { super.initState(); controller = CameraController(yourCamera, ResolutionPreset.high); controller.initialize().then((_) { if (!mounted) { return; } setState(() {}); }); }
Здесь yourCamera
- это объект камеры, который вы хотите использовать.
3. Когда контроллер камеры был инициализирован, вы можете настроить параметры pictureSize
и previewSize
:
Future<void> setCameraAndCaptureSize() async { if (!controller.value.isInitialized) { return null; } // Получение текущих настроек камеры final CameraDescription cameraDescription = await yourCamera; // Получение списка поддерживаемых разрешений для изображений и предпросмотра final characteristics = await yourCamera; final availableCaptureSize = characteristics.map((e) => e.) .toList(); // Определение наиболее подходящего разрешения Size minimumCaptureSize = availableCaptureSize[0]; for (Size size in availableCaptureSize) { if (size.height < minimumCaptureSize.height) { minimumCaptureSize = size; } } // Установка разрешений final int maxPreviewWidth = MediaQuery.of(context).size.width.floor(); final int maxPreviewHeight = MediaQuery.of(context).size.height.floor(); final double aspectRatio = MediaQuery.of(context).size.aspectRatio; final double minAspectRation = math.min(camera .value.aspectRatio, aspectRatio); final double maxAspectRation = math.max(camera .value.aspectRatio, aspectRatio); Size? captureSize; for (Size size in availableCaptureSize) { if (size.height <= maxPreviewHeight && size.width <= maxPreviewWidth) { if (size.height >= minimumCaptureSize.height) { if (captureSize == null || (size.height * size.width).floor() > (captureSize.height * captureSize.width) .floor()) { captureSize = size; } } } } if (captureSize == null) { captureSize = availableCaptureSize.last; } yourCamera. .value = yourCamera.value.copyWith( pictureSize: captureSize, previewSize: captureSize); setState(() { // ... }); }
В этом коде yourCamera
- это объект камеры, которую вы хотите использовать, ResolutionPreset.high
- предустановленное значение для выбранной камеры. availableCaptureSize
содержит все поддерживаемые разрешения камеры, а minimumCaptureSize
- выбранное разрешение для управления высотой и шириной кадра камеры.
4. Наконец, вы можете использовать контроллер камеры для захвата фотографий или отображения предварительного просмотра:
Widget build(BuildContext context) { if (!controller.value.isInitialized) { return Container(); } return MaterialApp( home: Scaffold( body: AspectRatio( aspectRatio: controller.value.aspectRatio, child: CameraPreview(controller), ), floatingActionButton: FloatingActionButton( onPressed: () { controller.takePicture().then((XFile file) { if (mounted) { // Обработка полученного изображения // ... } }); }, child: Icon(Icons.camera_alt), ), ), ); }
В этом коде AspectRatio
используется для поддержки корректных пропорций изображения, а CameraPreview
отображает предварительный просмотр с использованием контроллера камеры controller
.
Вот и всё! Теперь вы знаете, как управлять высотой и шириной кадра камеры в пакете camera в Flutter. Вы можете настроить параметры pictureSize
и previewSize
, чтобы уменьшить высоту и оставить максимальную ширину камеры.