【问题标题】:How to get 720p Android Camera Preview Data?如何获取 720p Android 相机预览数据?
【发布时间】:2011-12-05 12:43:36
【问题描述】:

我想使用相机预览进行图像识别。对于我的 目的,我需要预览分辨率尽可能高 (同时,向用户显示预览)。

我创建了一个 Preview 类,扩展 SurfaceView 并设置 预览大小为 1280x720。我添加了一个 PreviewCallBack 来获得直播 图片:

camera = Camera.open();

parameters = camera.getParameters();
parameters.setPreviewSize(1280,720);

camera.setParameters( parameters);
byte[] b = new byte[camera.getParameters().getPreviewSize().width *
  camera.getParameters().getPreviewSize().height *
  ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat()) / 8];
camera.addCallbackBuffer(b);
camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());

try {
 camera.setPreviewDisplay(this.getHolder());
 camera.startPreview()
}

我的字节数组 b 是 1382400 字节,我的 CameraPreviewCallback.onPreviewFrame() 函数接收那些 1382400 字节 - 但只有第一个 497664 字节包含数据(匹配 768x432 分辨率 (HTC Desire)。

我在不同的设备上进行了测试,所有设备的显示分辨率都为 800x480(HTC Desire、LG 擎天柱 3D、三星 Galaxy S2、三星 Galaxy 标签, ...)。我的代码适用的唯一设备是 HTC Desire HD。

有谁知道如何以字节形式接收完整的 720p 分辨率 大批? “某事”似乎降低了预览分辨率以适应智能手机的显示。

问候

乔恩

【问题讨论】:

  • 您确定您的手机支持 720p 吗? Logcat 有没有说什么(比如“无法设置分辨率”)?
  • 是的,所有设备都支持 720p 作为预览大小。 Logcat 并没有说什么特别的东西——它看起来像是“某事”默默地降低了预览分辨率。
  • getPreviewSize() 是否返回正确的尺寸?
  • 刚刚根据我的意愿测试了这个,可以验证这一点。预览大小受支持且有效,但返回的预览数据较小,如此处所述。很奇怪。

标签: android resolution android-camera preview


【解决方案1】:

您不能使用任何随机分辨率进行相机预览。

某些设备仅支持某些分辨率。您可以通过Camera.Parameters.getSupportedPreviewSizes()¹ 查询这些信息。如果您的设备未在此列表中返回1280x720,则您无法使用它。请选择与您想要的分辨率接近的受支持分辨率。

¹ 一般来说,在使用任何分辨率(无论是否为 720p)之前,您都应该这样做

【讨论】:

  • (不幸的是)1280x720p 在每个列出的设备的列表中。我检查了 SupportedPreviewSizes。
【解决方案2】:

虽然这是一个老问题,但答案并没有改变:每个设备支持的预览尺寸列表并不准确。据我所知,默认预览大小始终有效。其他尺寸似乎最多只能视具体情况而定 - 您可以有理由相信默认预览尺寸不会在屏幕上显示不正确,但仅此而已。特别是,即使“支持”字节数组也不会缩放以适应更大的图像格式,并且只有部分“支持”的预览尺寸会以分辨率正确呈现,并且不会出现绿色/粉色失真。

了解分辨率是否正确以及来自 onPreviewFrame() 的数据是否良好的唯一可靠方法是手动测试。

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多