Far*_*san 7 android surfaceview android-camera nexus-4
我扩展了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支持的值吗?我相信会有其他设备出现同样的问题我无法测试.关于如何解决这个问题的任何线索?
更新:发生的事情是,它接受错误的参数没有任何错误,它返回的图像是扭曲的,我也会尝试在这里得到一张图片.此外,没有运行时异常.
我在LG Lucid(型号VS840 4G)上遇到了同样的问题.基本上,getSupportedPictureSizes()返回这些尺寸:
Size Aspect Ratio
2560x1920 (1.3333333333333333)
3072x1728 (1.7777777777777777)
2048x1536 (1.3333333333333333)
2304x1296 (1.7777777777777777)
1536x864 (1.7777777777777777)
1280x960 (1.3333333333333333)
640x480 (1.3333333333333333)
Run Code Online (Sandbox Code Playgroud)
如果我们setPictureSize()使用1.7宽高比的任何尺寸调用,相机硬件不会抛出任何错误,但会返回失真的图像:

我尝试了许多技术让相机驱动程序承认这个尺寸不是真的支持,包括检查调用后getPictureSize()和getSupportedPictureFormats()调用后的结果setParameters().我找不到任何放弃这种行为的东西.
为了解决这个问题,我们现在模仿相机应用程序的行为:我们尝试从getSupportedPictureSizes()列表中找到"首选"尺寸,然后再回到选择最大尺寸(按宽度*高度计算).由于首选尺寸都具有1.333(4:3)的宽高比,因此这适用于此设备的问题.
有关精确实现的信息,请参阅Camera应用程序源设置值(第111行)和它更喜欢的硬编码大小(第63行).
我相信 Nexus 4 上的辅助面部摄像头支持 1280x960 图像。我不知道为什么该设备报告“混合”尺寸,通常每个摄像头都有自己的答案。
我可以确认,有些设备在相机功能上撒了谎,尽管我在预览尺寸方面比图片尺寸更有经验。
当您选择错误的尺寸时,可能会发生不同的情况。camera.setParameters()有时,如果您选择不受支持的大小,您将收到 RuntimeException 。有时,设备会默默接受参数,但getParameters()之后再询问,你会发现图片尺寸没有改变,或者不是你要求的。有些设备的谎言甚至更甚:它们假装设置了所需的大小,但实际的输出是不同的。例如,Galaxy Nexus 假装支持 320x240 视频,但您在预览回调中获得的缓冲区大小为 640x480。
Nexus 4 的另一个“好”功能是它显然对 android.camera.front功能很敏感(请参阅前置摄像头图像失真)
我用 Nexus 4 v.4.2.2 (JDQ39) 重现了你的逻辑;任一相机的图片尺寸 1280x960 都没有问题。请注意,图片方向并不完全符合人们的预期,但您的问题没有提到摆弄相机方向。
| 归档时间: |
|
| 查看次数: |
5005 次 |
| 最近记录: |