0

J'utilise l'API Camera2 pour afficher un aperçu de la caméra. Je veux également implémenter un ImageReader pour traiter les images. J'ai une fonction d'aperçu de début. Quand je l'appelle l'aperçu est juste noir. Si je supprime "mimageReader.getSurface()" de Arrays.asList() je suis capable de voir l'aperçu de la caméra. Comment afficher un aperçu de la caméra et utiliser ImageReader?Camera2 api avec Aperçu

private void startPreview() 
    { 
     List<Surface> outputSurfaces = new ArrayList<>(); 
     List surfaces = new ArrayList<>(); 

     SurfaceTexture surfaceTexture = textureView.getSurfaceTexture(); 
     surfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 
     Surface previewSurface = new Surface(surfaceTexture); 

     try { 
      mCaptureRequestBuilder = _cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 




      mCaptureRequestBuilder.addTarget(previewSurface); 

      _cameraDevice.createCaptureSession(Arrays.asList(previewSurface,mimageReader.getSurface()), 
        new CameraCaptureSession.StateCallback() { 
         @Override 
         public void onConfigured(CameraCaptureSession session) { 
          Log.d("", "onConfigured: startPreview"); 

          try { 
           session.setRepeatingRequest(mCaptureRequestBuilder.build(),null,mthreadhandler); 
          } catch (CameraAccessException e) { 
           e.printStackTrace(); 
          } 
         } 

         @Override 
         public void onConfigureFailed(CameraCaptureSession session) { 
          Log.d("", "onConfigureFailed: startPreview"); 

         } 
        }, null); 
     } catch (CameraAccessException e) { 
      e.printStackTrace(); 
     } 
    } 

Répondre

0

Vous devez créer une nouvelle instance de ImageReader, définissez son onImageAvailableListener (vous pouvez traiter les images de l'aperçu ici) et l'ajouter à PreviewRequestBuilder. Par exemple:

mImageReader = ImageReader.newInstance(
       mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 2); 

mImageReader.setOnImageAvailableListener(mOnGetPreviewListener, mBackgroundHandler); 

mPreviewRequestBuilder.addTarget(mImageReader.getSurface());