概述
Android Camera 有 Camera.Parameters 属性,那我们怎么才能找到一个 合适的尺寸 去预览才不会变形呢?
demo
1、首先我们要 通过api 去获取 当前相机 所支持的 预览 比例
Camera.Parameters parameters =camera.getParameters()
//获取当前相机支持的 尺寸
List<Camera.Size> vSizes = parameters.getSupportedPreviewSizes();
//获取和屏幕比列相近的 一个尺寸
Camera.Size previewSize = getSuitableSize(vSizes);
//重新定义 宽和高 (宽始终小于高)
int previewWidth = Math.min(previewSize.width, previewSize.height);
int previewHeight = Math.max(previewSize.width, previewSize.height);
//获取 最终 我们需要预览的大小比列
mPreviewScale = previewWidth * 1f / previewHeight;
//算出 最终 宽高
if (mPreviewWidth > previewWidth) {
mPreviewHeight = (int) (mPreviewWidth / mPreviewScale);
} else if (mPreviewWidth < previewWidth) {
mPreviewHeight = (int) (mPreviewHeight * mPreviewScale);
}
parameters.setPreviewSize(mPreviewWidth, mPreviewHeight); // 设置预览图像大小
2、 获取 最接近屏幕的比例 方法
private Camera.Size getSuitableSize(List<Camera.Size> sizes) {
int minDelta = Integer.MAX_VALUE; // 最小的差值,初始值应该设置大点保证之后的计算中会被重置
int index = 0; // 最小的差值对应的索引坐标
for (int i = 0; i < sizes.size(); i++) {
Camera.Size previewSize = sizes.get(i);
Log.v(TAG, "SupportedPreviewSize, width: " + previewSize.width + ", height: " + previewSize.height);
// 找到一个与设置的分辨率差值最小的相机支持的分辨率大小
if (previewSize.width * mPreviewScale == previewSize.height) {
int delta = Math.abs(mPreviewWidth - previewSize.width);
if (delta == 0) {
return previewSize;
}
if (minDelta > delta) {
minDelta = delta;
index = i;
}
}
}
return sizes.get(index); // 默认返回与设置的分辨率最接近的预览尺寸
}
3、最后 我们要 重新设置 SurfaceView 的宽高为 我们算出来的 mPreviewWidth 、mPreviewHeight
RelativeLayout.LayoutParams preViewLp = (RelativeLayout.LayoutParams) mSurfaceView.getLayoutParams();
mPreviewPoint = new Point(mPreviewWidth , mPreviewHeight);
preViewLp.width = mPreviewPoint.x;
preViewLp.height = mPreviewPoint.y;
mSurfaceView.setLayoutParams(preViewLp);
最后
以上就是笑点低自行车为你收集整理的android Camera 如何 获取最佳合适的尺寸的全部内容,希望文章能够帮你解决android Camera 如何 获取最佳合适的尺寸所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复