我的应用程序使用表面持有器打开相机。相机以默认预览尺寸打开。在某些设备上,预览尺寸捕获的图像比实际屏幕上可见的图像要多。为了避免这种情况,我开始自己设置预览尺寸。标准是从可用尺寸列表中选择与屏幕宽度最接近的预览尺寸。
大部分时间这样做效果很好。但是我经常遇到一些不喜欢我选择的预览尺寸的设备。
1)Nexus 4没有捕获我选择的某个预览尺寸的图像。 2)Samsung S 4在捕获图像时会出现噪点条纹。
因此,我想了解是否违反了标准。以下是我的问题:-
1)我正在使用表面持有器打开相机。我能否使用其他方式在应用程序中使用相机硬件。
2)我正在从可用尺寸列表中选择预览大小。在选择任何尺寸之前,是否有任何特定的尺寸需要注意?选择尺寸的逻辑如下:
任何关于这方面的指导都将非常有帮助。
谢谢!! Gagan
大部分时间这样做效果很好。但是我经常遇到一些不喜欢我选择的预览尺寸的设备。
1)Nexus 4没有捕获我选择的某个预览尺寸的图像。 2)Samsung 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;
}
任何关于这方面的指导都将非常有帮助。
谢谢!! Gagan