如何获得720p Android Camera预览数据?

时间:2011-12-05 12:43:36

标签: android resolution android-camera preview

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

我创建了一个Preview类,扩展了SurfaceView并设置了 PreviewSize到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()
}

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

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

有谁知道如何以字节的形式接收完整的720p分辨率 阵列? “Something”似乎会降低预览分辨率以适应智能手机显示屏。

此致

Joern

2 个答案:

答案 0 :(得分:8)

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

某些设备仅支持某些分辨率。您可以通过Camera.Parameters.getSupportedPreviewSizes()¹查询这些内容。如果您的设备未在此列表中返回1280x720,则无法使用它。选择一个支持的分辨率,而不是您想要的分辨率。

¹在使用任何分辨率720p之前,您应该这样做

答案 1 :(得分:2)

虽然这是一个老问题,但答案仍未改变:每个设备支持的预览尺寸列表不准确。据我所知,默认预览大小始终有效。其他尺寸似乎最多可以根据具体情况使用 - 您可以合理地确信默认预览尺寸在屏幕上看起来不会不正确,但这就是全部。特别是,即使它们被“支持”,字节数组也不会缩放以适应更大的图像格式,并且只有一些“支持的”预览尺寸将在分辨率下正确呈现,并且没有绿色/粉红色失真。

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