Jetpack admite la biblioteca de la primera experiencia CameraX

1. Descripción general de CameraX

Descripción general de CameraX

Comenzando con CameraX

CameraX es una biblioteca de soporte de Jetpack diseñada para ayudarlo a simplificar el desarrollo de aplicaciones de cámara. Proporciona una interfaz API consistente y fácil de usar, adecuada para la mayoría de los dispositivos Android, y es compatible con versiones anteriores de Android 5.0 (API nivel 21).

Aunque utiliza las funciones de camera2, utiliza un enfoque más simple y basado en casos de uso que tiene conciencia del ciclo de vida. También resuelve problemas de compatibilidad de dispositivos, por lo que no necesita incluir código específico del dispositivo en la base de código. Estas funciones reducen la cantidad de código que debe escribirse al agregar funciones de cámara a la aplicación.

Finalmente, con CameraX, los desarrolladores solo necesitan dos líneas de código para aprovechar la misma experiencia y características de la cámara que la aplicación de cámara preinstalada. CameraX Extensions es un complemento opcional, a través del cual puede agregar retratos, HDR, modo nocturno y efectos de belleza a su aplicación en dispositivos compatibles.

2. Uso de CameraX

2.1 CameraX tiene los siguientes requisitos mínimos de versión:

  • API de Android nivel 21
  • Componentes de la arquitectura de Android 1.1.1

2.2, use CameraX

Los desarrolladores usan CameraX para interactuar con la cámara del dispositivo usando un concepto abstracto llamado "caso de uso". Los casos de uso actuales son los siguientes:

  • Vista previa: preparar una vista previa de SurfaceTexture
  • Análisis de imagen: proporcione buffers accesibles para la CPU para el análisis (por ejemplo, aprendizaje automático)
  • Captura de imagen: toma y guarda una foto

Nota: Primero debe solicitar y abrir los permisos de la Cámara:

<uses-permission android:name="android.permission.CAMERA" />

2.2.1. Realizar vista previa:

El caso de uso de vista previa genera una SurfaceTexture para transmitir la entrada de la cámara. También proporciona otra información necesaria para recortar, escalar o rotar la Vista para garantizar que se muestre correctamente.

Cuando la cámara está activa, la vista previa de la imagen se transmitirá a esta SurfaceTexture. Puede conectar SurfaceTexture a TextureView o GLSurfaceView.

PreviewConfig -> Vista previa

    PreviewConfig config = new PreviewConfig.Builder().build();
    Preview preview = new Preview(config);

    preview.setOnPreviewOutputUpdateListener(
        new Preview.OnPreviewOutputUpdateListener() {
            @Override
            public void onUpdated(Preview.PreviewOutput previewOutput) {
                // Your code here. For example, use previewOutput.getSurfaceTexture()
                // and post to a GL renderer.
        });
    });

    CameraX.bindToLifecycle((LifecycleOwner) this, preview);

2.2.2 Analizar las imágenes:

El caso de uso de análisis de imágenes proporciona a su aplicación imágenes a las que la CPU puede acceder para realizar procesamiento de imágenes, visión por computadora o inferencia de aprendizaje automático. La aplicación implementa el método Analyzer que se ejecuta en cada cuadro.

ImageAnalysisConfig -> ImageAnalysis

    ImageAnalysisConfig config =
        new ImageAnalysisConfig.Builder()
            .setTargetResolution(new Size(1280, 720))
            .build();

    ImageAnalysis imageAnalysis = new ImageAnalysis(config);

    imageAnalysis.setAnalyzer(
        new ImageAnalysis.Analyzer() {
            @Override
            public void analyze(ImageProxy image, int rotationDegrees) {
                // insert your code here.
            }
    });
    CameraX.bindToLifecycle((LifecycleOwner) this, imageAnalysis, preview);
   

2.2.3. Fotografía:

El caso de uso de toma de fotografías tiene como objetivo tomar fotografías de alta resolución y alta calidad. No solo proporciona funciones simples de control manual de la cámara, sino que también proporciona funciones de balance de blancos automático, exposición automática y enfoque automático (3A). El programa de llamadas es responsable de decidir cómo usar las fotos tomadas, incluidas las siguientes opciones:

  • takePicture (OnImageCapturedListener): este método se utiliza para proporcionar un búfer de memoria para las imágenes capturadas.
  • takePicture (File, OnImageSavedListener): este método guarda la imagen capturada en la ubicación del archivo proporcionada.
  • takePicture (File, OnImageSavedListener, Metadata): puede utilizar este método para especificar los metadatos que se incrustarán en el archivo Exif del archivo guardado.

ImageCaptureConfig -> ImageCapture

    ImageCaptureConfig config =
        new ImageCaptureConfig.Builder()
            .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
            .build();

    ImagesCapture imageCapture = new ImageCapture(config);
   

2.2.4. Vincula el caso de uso al ciclo de vida

 //将用例绑定到生命周期
 //如果Android Studio抱怨“this”不是一个生命周期所有者
 //尝试重新构建项目或更新appcompat依赖项
 //版本1.1.0或更高。
 CameraX.bindToLifecycle((LifecycleOwner) this, imageCapture, imageAnalysis, preview);

3. Ejemplo de código

Ejemplo de CameraXApp

Ejemplo oficial de CameraX

Publicado 45 artículos originales · Me gusta 24 · Visitas 50,000+

Supongo que te gusta

Origin blog.csdn.net/zhijiandedaima/article/details/93202045
Recomendado
Clasificación