我的应用程序使用表面支架打开相机。相机以默认预览大小打开。在某些设备上,默认预览大小捕获的图像多于屏幕上实际可见的图像。为了避免这种情况,我开始自己设置预览大小。标准是从可用尺寸列表中选择最接近屏幕宽度的预览尺寸。
这在大多数情况下都很有效。但我经常偶然发现一些不喜欢我选择的预览尺寸的设备。
1) Nexus 4 没有为我选择的其中一种预览尺寸捕获图像。2) 三星 S 4 沿捕获的图像给出一条线(噪声)。
所以我想了解我是否在做任何违反标准的事情。这是我的问题:-
1)我正在使用表面支架打开相机。有没有其他方法可以在我的应用程序中使用相机硬件。
2) 我正在从可用尺寸列表中选择预览尺寸。在选择任何尺寸之前我应该寻找任何具体的东西吗?选择尺寸的逻辑如下:-
private Camera.Size getBestPreviewSize(int width, int height)
{
List<Size> sizes = camera.getParameters().getSupportedPreviewSizes();
if (sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = height;
int targetWidth = width;
int minWidthDiff = 0;
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.width - targetWidth) < minDiff) {
if(size.width > width) {
if (minWidthDiff == 0) {
minWidthDiff = size.width - width;
optimalSize = size;
}
else if (Math.abs(size.width - targetWidth) < minWidthDiff) {
minWidthDiff = size.width - width;
optimalSize = size;
}
minDiff = Math.abs(size.width - targetWidth);
}
}
}
}
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
任何有关这方面的指示都会有帮助。
谢谢 !!加根