gpt4 book ai didi

android - getSupportedPictureSize() 返回一个 Nexus4 实际上不支持的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:17 24 4
gpt4 key购买 nike

我已经扩展了一个 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 宽高比的尺寸,相机硬件不会抛出任何错误,但它会返回一个扭曲的图像:

sample of distorted result from LG Lucid, showing what appears to be a pixel buffer interpreted with the wrong stride

我尝试了很多技术让相机驱动程序承认这个尺寸并不真正受支持,包括在之后检查 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com