[英]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.