0

我正在使用Camera2 api顯示相機的預覽畫面。我也想實現一個ImageReader來處理圖像。我有一個開始預覽功能。當我打電話給它時,預覽只是黑色。如果我從Arrays.asList()中刪除「mimageReader.getSurface()」,我可以看到相機預覽。如何顯示相機預覽並使用ImageReader?Camera2 api with Preview

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(); 
     } 
    } 

回答

0

你必須創建的ImageReader的新實例,設置其onImageAvailableListener(你可以在這裏處理預覽幀),並將其添加到PreviewRequestBuilder。例如:

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

mImageReader.setOnImageAvailableListener(mOnGetPreviewListener, mBackgroundHandler); 

mPreviewRequestBuilder.addTarget(mImageReader.getSurface());