- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经扩展了一个 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);
}
}
到目前为止一切正常。
现在,由于应用程序的性质,我必须在 session 过程中在内存中保留两个位图,为了简单起见(避免测试期间的内存问题)我对 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)
如果我们调用 setPictureSize()
使用任何具有 1.7 宽高比的尺寸,相机硬件不会抛出任何错误,但它会返回一个扭曲的图像:
我尝试了很多技术让相机驱动程序承认这个尺寸并不真正受支持,包括在之后检查 getPictureSize()
和 getSupportedPictureFormats()
的结果调用 setParameters()
。我找不到任何可以暴露这种行为的东西。
为了解决这个问题,我们现在模仿普通相机应用程序的行为:我们尝试从 getSupportedPictureSizes()
列表中找到“首选”尺寸,然后回退到选择最大尺寸(如按宽度 * 高度计算)。由于首选尺寸的宽高比均为 1.333 (4:3),因此可以解决此设备上的问题。
查看相机应用源代码 where it sets the value (第 111 行)和 hardcoded sizes it prefers (第 63 行)用于确切的实现。
关于android - getSupportedPictureSize() 返回一个 Nexus4 实际上不支持的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16652712/
我已经扩展了一个 SurfaceView,用于显示一个非常简单的相机应用程序的相机源。为了找到每个设备的最佳预览尺寸,我使用了这个示例代码,它几乎用在我见过的所有开源相机应用程序中: List
我正在研究基于相机的应用程序开发,并正在研究捕获手机相机可以支持的分辨率列表。 getSupportPreview 或 PictureSizes 是最好的方法吗?如果是,它们之间有什么区别? 最佳答案
我是一名优秀的程序员,十分优秀!