是否可以在不显示相机预览的情况下拍摄图像?我要求我能够从线程或服务中捕获图像,而不会干扰前景应用程序,我不想显示相机预览,但我仍想在后台捕获图像并将其存储在设备中
我扩展了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);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都完美无缺.
现在,由于应用程序的性质,我必须在会话过程中在内存中保留两个位图,并且为了简单起见(避免在测试期间出现内存问题)我使用了与PICTURE SIZE相同的代码(替换了getSupportedPreviewSizes()和getSupportedPictureSizes()).虽然我必须决定为每个设备选择最佳图片尺寸的其他方法,但在大多数设备上一切都很好用.
最近,在Nexus 4设备上进行测试时,上述循环无法选择最佳图像尺寸.经过调查,我发现getSupportedPictureSizes()函数返回一个值,即1280*960,而Nexus 4相机实际上并不支持它.那么,如何解决这个问题呢?我的意思是,这个函数不应该只返回设备的CAMERA支持的值吗?我相信会有其他设备出现同样的问题我无法测试.关于如何解决这个问题的任何线索?
更新:发生的事情是,它接受错误的参数没有任何错误,它返回的图像是扭曲的,我也会尝试在这里得到一张图片.此外,没有运行时异常.