Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo obtener un solo marco de vista previa en Camera2 API Android 5.0?

Estoy intentando conseguir un marco de la inspección previo para la funcionalidad de la exploración del código de QR usando el API de Camera2 . En la vieja Cámara API es tan fácil como:

android.hardware.Camera mCamera; ... mCamera.setPreviewCallback(new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { // will be invoked for every preview frame in addition to displaying them on the screen } }); 

Sin embargo, no puedo encontrar una manera de lograrlo utilizando la nueva API de Camera2. Me gustaría recibir varios marcos en los que pueda trabajar – lo mejor sería recibir una matriz de bytes como en la API antigua. ¿Alguna idea de cómo hacer eso?

  • ¿Por qué la aplicación no se vuelve a conectar al dispositivo BLE cuando se configura autoConnect como true en Android?
  • Agregar lugar definido por el usuario en el campo de entrada haciendo clic en un botón para detener el geocompleto
  • Transición del elemento de la lista para expandirse en detalles como Google Inbox
  • ¿Es necesario actionbarsherlock ya?
  • Widget de Android no se está actualizando
  • Cómo obtener el código de estado en la respuesta correcta Volley Android
  • Determinar si la copia de seguridad de todo el sistema está habilitada mediante programación
  • Android: Desea establecer fuentes personalizadas para toda la aplicación no en tiempo de ejecución
  • Cómo leer los datos de uso de la CPU de almacenamiento
  • Abrir navegador con la última URL visitada
  • Android de bajo nivel de lectura de la tarjeta SD superior a 2GB
  • Reemplazos de reemplazo: reemplazo en toda la ruta (incluyendo /)
  • One Solution collect form web for “¿Cómo obtener un solo marco de vista previa en Camera2 API Android 5.0?”

    Use debajo del código para hacerlo.

      CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); try { CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraDevice.getId()); Size[] jpegSizes = null; if (characteristics != null) { jpegSizes = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(ImageFormat.JPEG); } int width = 480;//480x320 int height = 320; if (jpegSizes != null && 0 < jpegSizes.length) { width = jpegSizes[0].getWidth(); height = jpegSizes[0].getHeight(); } ImageReader reader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1); List<Surface> outputSurfaces = new ArrayList<Surface>(2); outputSurfaces.add(reader.getSurface()); outputSurfaces.add(new Surface(textureView.getSurfaceTexture())); final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); captureBuilder.addTarget(reader.getSurface()); captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); // Orientation int rotation = ((Activity) context).getWindowManager().getDefaultDisplay().getRotation(); captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation)); final File file = getFileDir(); ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { Image image = null; try { image = reader.acquireLatestImage(); ByteBuffer buffer = image.getPlanes()[0].getBuffer(); byte[] bytes = new byte[buffer.capacity()]; buffer.get(bytes); save(bytes); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (image != null) { image.close(); } } } private void save(byte[] bytes) throws IOException { OutputStream output = null; try { output = new FileOutputStream(file); output.write(bytes); } finally { if (null != output) { output.close(); } } } }; reader.setOnImageAvailableListener(readerListener, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.