2017-03-25 60 views
1

내가 사용하여 줌 레벨을 제어하고자하는 실시간 카메라 2 미리보기 표시하는 갤럭시 S7에 대한 응용 프로그램 쓰고 있어요 :카메라 2 스칼라 자르기 영역 및 센서 이미지 크기

captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomCropPreview); 
cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler); 

사각형 zoomCropPreview 인을 필요한 다른 작물/줌에 맞게 변경되었습니다. S7이 최대 디지털 줌 8을 지원하고 센서 배열 크기가 4032x3024이므로 Rect 값을 결정하는 데 어려움이 있습니다. 나는 https://source.android.com/devices/camera/camera3_crop_reprocess.html을 보았지만 막혔다.

예를 들어 zoomCropPreview = (0,0,4032, 3024)는 (0,0,504,378) - 8x 줌과 같이 벌금을 부과합니다. 그러나 (250,250,504,378) 또는 (1512, 1134, 1008, 756)과 같은 다른 영역은 경계가 센서 배열 내에 있더라도 작동하지 않습니다. 여기에 코드의 카메라 미리보기 부분은 내가 scalar_crop_region에 대한 적절한 사각형의 값을 결정하려면 어떻게

protected void createCameraPreview() { 
     try { 
     SurfaceTexture texture = textureView.getSurfaceTexture(); 
     assert texture != null; 
     texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight()); 
     Surface surface = new Surface(texture); 
     captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     captureRequestBuilder.addTarget(surface); 
     cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { 
      @Override 
      public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 
       //The camera is already closed 
       if (null == cameraDevice) { 
        return; 
       } 
       // When the session is ready, we start displaying the preview. 
       //try to change zoom 
       captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomCropPreview); 
       cameraCaptureSessions = cameraCaptureSession; 
       updatePreview();     //update preview screen 
      } 

      @Override 
      public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { 
       Toast.makeText(AndroidCameraApi.this, "Configuration change", Toast.LENGTH_SHORT).show(); 
      } 
     }, null); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

https://inducesmile.com/android/android-camera2-api-example-tutorial/을 기반으로? 당신이 SCALER_CROP_REGION의 문서를 보면

+0

질문에 대한 답변을 찾았습니까? 나는 또한 약간의 문제가있다. http://stackoverflow.com/questions/43724447/camera-2-crop-region –

답변

0

가 당신에게 알려줍니다 자르기 영역의 폭과 높이가 바닥보다 작게 설정할 수 없습니다

(activeArraySize.width/android.scaler.availableMaxDigitalZoom) 및 바닥 (activeArraySize.height/android.scaler.availableMaxDigitalZoom)에 각각 있습니다.

의사는 하드웨어 등을 기준으로 반올림한다고 말합니다. 자른 부분의 높이와 너비를 계산하려고합니다. 그런 다음 왼쪽 상단과 오른쪽 하단 모서리를 계산할 수 있습니다. 이 모서리는 자른 영역의 영역을 제공합니다.

float cropW = activeArraySize.width()/zoomLevel; 
float cropH = activeArraySize.height()/zoomLevel; 

// now we calculate the corners 
int top = activeArraySize.centerY() - (int) (cropH/2f); 
int left = activeArraySize.centerX() - (int) (cropW/2f); 
int right = activeArraySize.centerX() + (int) (cropW/2f); 
int bottom = activeArraySize.centerY() + (int) (cropH/2f); 

화면의 왼쪽 상단이 0,0이라는 것을 기억하십시오. 추가 설명을 위해이 그림을 그립니다.