问题完全取决于设备。每个供应商都会为其相机设置并列出支持的分辨率。此外,它对于预览和实际图像捕获可能有所不同(很少但仍然)。如果您不希望扭曲和扭曲图像并进行预览,则不能超出此列表。
尽管并非所有事情都如此令人沮丧。通常,在此列表中,有几种受支持的分辨率,这些分辨率的纵横比与手机的屏幕相同(或至少有一种分辨率会在图像的顶部或底部添加黑色空间,而不是在侧面添加黑色空间)
所以我建议您找到屏幕的纵横比(TextureView / SurfaceView)。计算相机支持的所有预览宽高比。比较这些比率,然后选择与屏幕相同的比率(TextureView / SurfaceView),但分辨率最高。对于可能在顶部或底部显示黑色空间而不在侧面显示黑色空间的分辨率,您可能会实现类似的效果。
这是一个示例代码,它执行相似的操作,但方式有所不同。
//Create TextureView & TextureView surfaceTextureListener
private TextureView mTextureView;
private TextureView.SurfaceTextureListener mSurfaceTextureListener =
new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface,int width,int height) {
setupCamera(width,height);
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface,int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
};
//Implement Activity onResume
@Override
public void onResume() {
super.onResume();
if(mTextureView.isAvailable()) {
} else {
mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
}
}
//Get surface preview sizes & camera Id
private void setupCamera(int width,int height) {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
for(String cameraId : cameraManager.getCameraIdList()) {
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId);
if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) ==
CameraCharacteristics.LENS_FACING_FRONT){
continue;
}
StreamConfigurationMap map = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
mPreviewSize = getPreferredPreviewSize(map.getOutputSizes(SurfaceTexture.class),width,height);
mCameraId = cameraId;
return;
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private Size getPreferredPreviewSize(Size[] mapSizes,int height) {
List<Size> collectorSizes = new ArrayList<>();
for(Size option : mapSizes) {
if(width > height) {
if(option.getWidth() > width &&
option.getHeight() > height) {
collectorSizes.add(option);
}
} else {
if(option.getWidth() > height &&
option.getHeight() > width) {
collectorSizes.add(option);
}
}
}
if(collectorSizes.size() > 0) {
return Collections.min(collectorSizes,new Comparator<Size>() {
@Override
public int compare(Size lhs,Size rhs) {
return Long.signum(lhs.getWidth() * lhs.getHeight() - rhs.getWidth() * rhs.getHeight());
}
});
}
return mapSizes[0];
}
取自here
希望有帮助。
,
只需克隆下面的链接GitHub代码并对其进行破坏即可。
https://github.com/android/camera-samples/tree/master/Camera2VideoJava/
这是相机2 API的完整说明。
https://developer.android.com/guide/topics/media/camera
本文链接:https://www.f2er.com/2951121.html