我已经扩展了一个 SurfaceView 来显示一个非常简单的相机应用程序的相机源。为了找到每个设备的最佳预览尺寸,我使用了这个示例代码,它在我见过的几乎所有开源相机应用程序中都有使用:
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
double minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.width - width) < minDiff) {
screenWidth = size.width;
screenHeight = size.height;
minDiff = Math.abs(size.width - width);
}
}
到目前为止,一切都完美无缺。
现在,由于应用程序的性质,我必须在会话过程中将两个位图保留在内存中,并且为了简单起见(避免测试期间出现内存问题),我对 PICTURE SIZE 使用了相同的代码(替换了getSupportedPreviewSizes() 和 getSupportedPictureSizes())。尽管我必须决定一些其他方式来为每个设备选择最佳图片尺寸,但在大多数设备上一切都很好。
最近,在 Nexus 4 设备上进行测试时,上述循环未能选择最佳图片尺寸。经过调查,我发现 getSupportedPictureSizes() 函数返回一个值,即 1280*960,Nexus 4 相机实际上并不支持该值。那么,如何解决这个问题呢?我的意思是,这个函数不应该只返回设备的 CAMERA 支持的那些值吗?我确信会有其他设备存在相同的问题,我将无法对其进行测试。关于如何解决这个问题的任何线索?
更新:发生的事情是它接受了错误的参数而没有任何错误,并且它返回的图像失真,我也会尝试在这里获取图片。此外,没有运行时异常。