Предварительный просмотр Flutter Camera не вращается с ориентацией телефона - PullRequest
0 голосов
/ 01 июня 2018

Я новичок в Dart / Flutter и в настоящее время использую Flutter Camera Plugin , но у меня возникла проблема с CameraPreview, когда телефон переходит в альбомный режим.Изображения остаются вертикальными и не поворачиваются на 90 градусов с телефоном.

Я пробовал бесчисленное количество вещей, включая Transform.rotate (), но я не могу получить изображение для обоих, заполнить экран иповернуть на 90 градусов.

Снимки, сделанные в то время, когда телефон был сбоку, при просмотре сохранялись в правильной ориентации, но с использованием _cameraPreviewWidget.

Обычный

Пейзаж

Ответы [ 2 ]

0 голосов
/ 21 августа 2019

Пакетный вызов camera_camera https://pub.dev/packages/camera_camera
отлично справился с работой и предоставил отличную функцию, позволяющую напрямую ссылаться на его исходный код или ответвление.

о проблеме поворота, пожалуйста, используйте этот пакет https://pub.dev/packages/native_device_orientation
и оберните тело следующим образом

return Scaffold(
      body: NativeDeviceOrientationReader(builder: (context) {
        NativeDeviceOrientation orientation =
            NativeDeviceOrientationReader.orientation(context);

полный код можно указать по https://github.com/marslord/camera/blob/master/lib/cam.dart, это не пакет camera_camera, и автор использует RotateBox

return RotatedBox(
          quarterTurns: turns,
          child: Transform.scale(
            scale: 1 / controller.value.aspectRatio,
            child: Center(
              child: AspectRatio(
                aspectRatio: controller.value.aspectRatio,
                child: CameraPreview(controller),
              ),
            ),
          ),
        );

camera_camera использует это в строке 76

return NativeDeviceOrientationReader(
  useSensor: true,
  builder: (context) {
    NativeDeviceOrientation orientation =
        NativeDeviceOrientationReader.orientation(context);

о проблеме с размером экрана
пакет camera_camera делаетэто с кодом ниже полный код здесь https://github.com/gabuldev/camera_camera/blob/master/lib/page/camera.dart

    return widget.mode ==
              CameraMode.fullscreen
          ? OverflowBox(
              maxHeight: size.height,
              maxWidth: size.height *
                  previewRatio,
              child: CameraPreview(
                  bloc.controllCamera),
            )
          : AspectRatio(
              aspectRatio: bloc
                  .controllCamera
                  .value
                  .aspectRatio,
              child: CameraPreview(
                  bloc.controllCamera),
            );

Выполнить результат пакета camera_camera можно найти на его github

Выполнить результат https://github.com/marslord/camera
enter image description here

и проверка с реальным устройством, и работает

официальный пример плагина камеры rotate image может работать с объединением Native_device_orientation и RotateBox, вы можете ссылаться https://github.com/marslord/camera/blob/master/lib/cam.dart
, но в официальном примере плагина камеры проблема с подгонкой экрана потребует изменения кода макета

Я бы предложил использовать метод camera_camera, Stack CameraPreview и Button.он больше похож на приложение Native Camera и прост в обслуживании ландшафтного режима.

Официальный пример плагина камеры. Поворот фрагмента кода изображения с объединением Native_device_orientation и RotateBox

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(
        title: const Text('Camera example'),
      ),
      body: NativeDeviceOrientationReader(builder: (context) {

        NativeDeviceOrientation orientation =
        NativeDeviceOrientationReader.orientation(context);

        int turns;
        switch (orientation) {
          case NativeDeviceOrientation.landscapeLeft:
            turns = -1;
            break;
          case NativeDeviceOrientation.landscapeRight:
            turns = 1;
            break;
          case NativeDeviceOrientation.portraitDown:
            turns = 2;
            break;
          default:
            turns = 0;
            break;
        }

        return Column(
          children: <Widget>[
            Expanded(
              child: RotatedBox(
                quarterTurns: turns,
                child: Transform.scale(
                  scale: 1 / controller.value.aspectRatio,
                  child: Container(
                    child: Padding(
                      padding: const EdgeInsets.all(1.0),
                      child: AspectRatio(
                        aspectRatio: controller.value.aspectRatio,
                        child: Center(
                          child: _cameraPreviewWidget(),
                        ),
                      ),
                    ),
0 голосов
/ 01 июня 2018

При повороте телефона во время использования камеры предварительный просмотр будет оставаться вертикальным, однако при просмотре изображения оно будет в альбомной ориентации, попробуйте использовать приложение камеры по умолчанию, и оно будет таким же

. Вы можетеочевидно, поверните ваш пользовательский интерфейс, который находится в верхней части предварительного просмотра камеры, когда телефон вращается

...