【发布时间】:2023-02-17 01:08:19
【问题描述】:
我正在尝试构建类似于 Instagram Live 的 Live 功能。我想在纵向模式下打开相机预览全屏。我正在使用下面的设置相机预览的大小。但我只是被拉伸和扭曲了。
原因是我们从中选择要使用的最佳分辨率的 getSupportedPreviewSizes 只返回横向尺寸而不是纵向尺寸(宽度 > 高度)。
知道怎么做getSupportedPreviewSizes()改为返回支持的纵向尺寸?
public int[] setPreviewResolution(int width, int height) {
mCamera = openCamera();
mPreviewWidth = width;
mPreviewHeight = height;
Camera.Size rs = adaptPreviewResolution(mCamera.new Size(width, height));
if (rs != null) {
mPreviewWidth = rs.width;
mPreviewHeight = rs.height;
}
getHolder().setFixedSize(mPreviewWidth, mPreviewHeight);
mCamera.getParameters().setPreviewSize(mPreviewWidth, mPreviewHeight);
mGLPreviewBuffer = ByteBuffer.allocate(mPreviewWidth mPreviewHeight 4);
mInputAspectRatio = mPreviewWidth > mPreviewHeight ?
(float) mPreviewWidth / mPreviewHeight : (float) mPreviewHeight / mPreviewWidth;
return new int[] { mPreviewWidth, mPreviewHeight };
}
private Camera.Size adaptPreviewResolution(Camera.Size resolution) {
float diff = 100f;
float xdy = (float) resolution.width / (float) resolution.height;
Camera.Size best = null;
for (Camera.Size size : mCamera.getParameters().getSupportedPreviewSizes()) {
Log.v("widthhhhhhhhhhhdddd supported","" +" size.width: "+size.width+" hhhh: "+size.height);
if (size.equals(resolution)) {
return size;
}
float tmp = Math.abs(((float) size.height / (float) size.width) - xdy);
if (tmp < diff) {
diff = tmp;
best = size;
}
}
return best;
}
【问题讨论】:
标签: java android android-studio android-camera