相机预览显示挤在机器人

时间:2015-04-10 16:20:14

标签: java android camera

我的目的是进行方形相机预览。

我没有1:1比例的相机预览(我在Nexus 5模拟器中),所以我的最佳尺寸是640 x 480,所以为了适应正方形预览,我将SurfaceView尺寸设置为相等到宽高比但是将屏幕边缘偏移一半差异,只留下屏幕上的裁剪方块。表面视图本身的大小和偏移正确,但相机预览本身仍在正方形中显示压缩预览,而不是以正确的宽高比在屏幕外部分显示。

有什么想法?或者更好的是,叫我愚蠢,并指出我更好的解决方案。

用于设置SurfaceView

大小的代码
Camera.Parameters parameters = camera.getParameters();
List<Size> sizes = parameters.getSupportedPreviewSizes();
Size optimalSize = getOptimalPreviewSize(sizes, imageHolder.getMeasuredWidth(), imageHolder.getMeasuredHeight());

parameters.setPreviewSize(optimalSize.width, optimalSize.height);

int screenWidth = imageHolder.getMeasuredWidth();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(surfaceView.getMeasuredWidth(), surfaceView.getMeasuredHeight());

int ratio = screenWidth / optimalSize.height;

params.width = optimalSize.width * ratio;
int offset = params.width - screenWidth;
if(offset > 0) {
   offset = offset/2;
}

params.setMargins(-offset,0,0,0);
surfaceView.setLayoutParams(params);
camera.setParameters(parameters);

camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();

这是目前预览的方式

Camera Preview Squeezed

这是拍摄后照片在相同大小的正方形中的显示方式

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为最简单的解决方案就是掩盖你不想看到的相机预览的那些部分。只需将视图置于顶部。 其他方法是进行一些实时图像处理,这将需要您处理NDK。