2017-10-02 3 views
0

Wenn Sie versuchen, camera2 api zu verwenden, benötigen Sie eine Funktion, mit der Benutzer zoomen/tippen können, um zu vergrößern & herauszoomen.Bilderfassung in Camera2 Api nach dem Zoomen

diesen Code Gebrauchte

zum Zoomen
   CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); 
       CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 
       float maxzoom = (characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM)) * 10; 
       Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE); 

       int minW = (int) (m.width()/maxzoom); 
       int minH = (int) (m.height()/maxzoom); 
       int difW = m.width() - minW; 
       int difH = m.height() - minH; 
       int cropW = 0, cropH = 0; 
       if (!touchFlagForZoom) { 
        cropW = difW/100 * (int) 25; 
        cropH = difH/100 * (int) 25; 
        touchFlagForZoom = true; 

       } else { 
        cropW = difW/100 * (int) 0; 
        cropH = difH/100 * (int) 0; 
        touchFlagForZoom = false; 

       } 
       cropW -= cropW & 3; 
       cropH -= cropH & 3; 
       Rect zoom = new Rect(cropW, cropH, m.width() - cropW, m.height() - cropH); 
       captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom); 


       try { 
        cameraCaptureSessions 
          .setRepeatingRequest(captureRequestBuilder.build(), null, null); 
       } catch (CameraAccessException e) { 
        e.printStackTrace(); 
       } catch (NullPointerException ex) { 
        ex.printStackTrace(); 
       } 

Problem Es für die Vorschau sehr perfekt funktioniert, aber wenn ich das Bild nach der Zoom erfasst, es mir die un-gezoomt Bitmap erhalten.

Antwort

0

Setzen Sie dieselbe Schnittregion in Ihrer Stillaufnahmeanfrage?

Die Zuschneide-Region ist eine pro-Frame-Einstellung. Wenn Sie also die Standard-Zuschneide-Region in der Still-Capture-Anfrage verwenden, erhalten Sie das volle FOV, nicht Ihren Zoom.