Java 是否从相机预览android camera2将图像保存在矩形内?

Java 是否从相机预览android camera2将图像保存在矩形内?,java,android,android-camera2,Java,Android,Android Camera2,我的相机预览框上有一个视点矩形。现在,我的想法是只从视点捕获图像并将其保存在我的内部存储器中。我使用了captureBuilder.set(CaptureRequest.SCALER\u CROP\u REGION,cropRect) 但由于某种原因,当我指定矩形的坐标并保存图像时,图像在保存时看起来像是缩小了,因此,视点内的图像的某些部分被切断。我试着调整x,y的位置,但似乎不起作用。有什么问题吗?我使用的是Camera2API。这是我的密码 private void captureStil

我的相机预览框上有一个视点矩形。现在,我的想法是只从视点捕获图像并将其保存在我的内部存储器中。我使用了
captureBuilder.set(CaptureRequest.SCALER\u CROP\u REGION,cropRect)
但由于某种原因,当我指定矩形的坐标并保存图像时,图像在保存时看起来像是缩小了,因此,视点内的图像的某些部分被切断。我试着调整x,y的位置,但似乎不起作用。有什么问题吗?我使用的是Camera2API。这是我的密码

 private void captureStillPicture() {
        try {
            final Activity activity = getActivity();
            if (null == activity || null == mCameraDevice) {
                return;
            }
            // This is the CaptureRequest.Builder that we use to take a picture.
            final CaptureRequest.Builder captureBuilder =
                    mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
            captureBuilder.addTarget(mImageReader.getSurface());

            // Use the same AE and AF modes as the preview.
            CameraManager manager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);

            CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraDevice.getId());







            Size[] jpegSizes = null;
            if (characteristics != null) {
                jpegSizes = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(ImageFormat.JPEG);



            }
            int width = 640;
            int height = 480;
            if (jpegSizes != null && 0 < jpegSizes.length) {
                width = jpegSizes[2].getWidth();
                height = jpegSizes[2].getHeight();
            }





            int x = width/5;
            int y = height/6;
            int topX = x + (250 / 4) ;
            int topY = y + (250 / 5);
           Rect cropRect = new Rect(topX,topY,x,y);

            captureBuilder.set(CaptureRequest.SCALER_CROP_REGION, cropRect);

            captureBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
            setAutoFlash(captureBuilder);

            // Orientation
            int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
            captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation));

            CameraCaptureSession.CaptureCallback CaptureCallback
                    = new CameraCaptureSession.CaptureCallback() {

                @Override
                public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                               @NonNull CaptureRequest request,
                                               @NonNull TotalCaptureResult result) {
                    showToast("Saved: " + mFile);
                    Log.d(TAG, mFile.toString());
                    unlockFocus();
                }
            };

            mCaptureSession.stopRepeating();
            mCaptureSession.abortCaptures();
            mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
private void captureStillPicture(){
试一试{
最终活动=getActivity();
if(null==activity | | null==mCameraDevice){
返回;
}
//这是我们用来拍照的CaptureRequest.Builder。
最终CaptureRequest.Builder captureBuilder=
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE\u STILL\u CAPTURE);
addTarget(mImageReader.getSurface());
//使用与预览相同的AE和AF模式。
CameraManager=(CameraManager)getActivity().getSystemService(Context.CAMERA_服务);
CameraCharacteristics characteristics=manager.getCameraCharacteristics(mCameraDevice.getId());
Size[]jpegsize=null;
如果(特征!=null){
jpegSizes=characteristics.get(CameraCharacteristics.SCALER\u STREAM\u CONFIGURATION\u MAP).getOutputSizes(ImageFormat.JPEG);
}
整数宽度=640;
内部高度=480;
if(jpegSizes!=null&&0

您找到解决方案了吗?