2016-02-26 20 views
1

我目前正在開發使用Camera2的應用程序。 我顯示在其上縮放和平移(I只需要顯示圖像的一部分)一個TextureView預覽。我的問題是,我需要分析整個圖像。獲取位圖轉換不從TextureView

我有什麼在我的CameraDevice.StateCallback:

@Override 
    public void onOpened(CameraDevice camera) { 
     mCameraDevice = camera; 

     SurfaceTexture texture = mTextureView.getSurfaceTexture(); 
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 
     Surface surface = new Surface(texture); 

     try { 
      mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     } catch (CameraAccessException e){ 
      e.printStackTrace(); 
     } 

     try { 
      mCameraDevice.createCaptureSession(Arrays.asList(surface), mPreviewStateCallback, null); 
      mPreviewBuilder.addTarget(surfaceFull); 
     } catch (CameraAccessException e) { 
      e.printStackTrace(); 
     } 
    } 

,並在我的SurfaceTextureListener:

@Override 
    public void onSurfaceTextureUpdated(SurfaceTexture surface) { 
     Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       my_analyze(mTextureView.getBitmap()); 
      } 
     }); 
     thread.start(); 
    } 

和位圖僅僅是我在TextureView(這是合乎邏輯的),但我看到想要整個圖像。

可能嗎?

感謝, NiCLO

回答

1

您可以將幀創建表面紋理,而不是一個是TextureView的一部分,那麼他們渲染到GLES p緩衝器,並與glReadPixels()讀回得到的像素。

如果你能在YUV,而不是RGB,則可以簡單地通過Camera2輸出引導至ImageReader獲取數據更快,更。

Grafika有一些有用的實施例中,例如「來自相機的紋理」。