繁体   English   中英

为什么不能改变图像的分辨率?

[英]Why can't change resolution of Image?

这是我的代码启动相机并使用Camerax

ImageCapture imageCapture;
ImageAnalysis imageAnalysis;
private void startCamera() {

        final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);

        cameraProviderFuture.addListener(new Runnable() {
            @Override
            public void run() {
                try {
                    // Camera provider is now guaranteed to be available
                    ProcessCameraProvider cameraProvider = cameraProviderFuture.get();

                    // Set up the view finder use case to display camera preview
                    Preview preview = new Preview.Builder().build();

                    int DefaultPictureSizeWidth=1280;
                    int DefaultPictureSizeHeight=720;
                    
                    imageAnalysis = new ImageAnalysis.Builder()
                               .setTargetResolution(new Size(DefaultPictureSizeWidth,DefaultPictureSizeHeight))
                                .build();                   


                    imageAnalysis.setAnalyzer(Executors.newFixedThreadPool(1), new ImageAnalysis.Analyzer() {
                                @Override
                                public void analyze(@NonNull ImageProxy image) {
                                    image.close();
                                }
                            }
                    );

                    // Set up the capture use case to allow users to take photos
                    ImageCapture.Builder imageCaptureBulder = new ImageCapture.Builder();
                    imageCaptureBulder.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);                    
                    imageCapture=imageCaptureBulder.build();
                    // Choose the camera by requiring a lens facing

                    CameraSelector.Builder bulder = new CameraSelector.Builder();                    
                    bulder.requireLensFacing(CameraSelector.LENS_FACING_BACK);                   
                    CameraSelector cameraSelector= bulder.build();

                    // Attach use cases to the camera with the same lifecycle owner
                     try{
                         cameraProvider.unbindAll();
                         mCamera = cameraProvider.bindToLifecycle((LifecycleOwner)MainActivity.this,cameraSelector,imageCapture,preview,imageAnalysis);
                         
                         preview.setSurfaceProvider(
                                 mPreviewView.getSurfaceProvider());                       
                     } catch (Exception e) {
                       // Log.d(TAG, "Use case binding failed")
                    }



                } catch (InterruptedException | ExecutionException e) {
                    // Currently no exceptions thrown. cameraProviderFuture.get()
                    // shouldn't block since the listener is being called, so no need to
                    // handle InterruptedException.
                }
            }
        }, ContextCompat.getMainExecutor(this));
    }

我将setTargetResolution设置为Size(1280,720)

但结果图像的分辨率仍然是最大(4032x3024)

如何改变图像的分辨率?

根据文档

CameraX 将根据请求应用最合适的分辨率。 如果主要需要满足纵横比,则仅指定setTargetAspectRatio ,CameraX 将根据设备确定适合的特定分辨率。 如果应用程序的主要需求是指定分辨率以提高图像处理效率(例如基于设备处理能力的中小型图像),请使用setTargetResolution(Size resolution)

你可以试试

imageAnalysis = new ImageAnalysis.Builder()
        .setTargetResolution(new Size(DefaultPictureSizeWidth,DefaultPictureSizeHeight))
                                .build();                   
    .setTargetAspectRatio(Rational(3,4)) //Tweak this as desired

但是,通常看起来目标分辨率取决于设备。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM