我试图通过onPreviewFrame对Android预览相机返回的图像进行一些图像处理。这在尺寸高达1080 x 720的情况下运行良好,但我尝试将分辨率提高到1920 x 1080。结果是我最终得到了不完整的数据,并且尝试处理每个像素会产生ArrayIndexOutOfBounds异常。
1920 x 1080图像的数据有2073600像素,但无论图像分辨率如何,onPreviewFrame返回的数据[]总是大小为1382400。
params.setPreviewSize(1920, 1080);
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
public synchronized void onPreviewFrame(byte[] data, Camera camera) {
changeMag = 0;
thisDiff = 0;
diffPixels = 0;
try {
if (currentImage != null) {
lastImage = currentImage;
}
Log.e("CameraTest", "Incoming data array size is only " + data.length);
}
此日志"传入数据阵列大小仅为1382400"无论我选择什么预览尺寸。
鉴于1920 x 1080被认为是支持的大小,有没有办法通过onPreviewFrame获取这些数据?
答案 0 :(得分:1)
显然,不支持1920x1080。如果getSupportedPreviewSizes()列表确实包含此解决方案,则这不是第一次设备报告不正确。例如,Galaxy Nexus声称支持QVGA(320x240)预览,但它无法提供此类图像。 setPreviewSize()+ setParameters()继续正确,甚至getPreviewSize()报告预期值。但预览回调会返回与设置此分辨率之前的大小相同的图像。
所以,我希望你真的收到一张1280x720的图片,并且对此无能为力。
请注意,仍然可以在此设备上录制1920x1080视频:录像机可能使用涉及硬件编码器的特殊机制,并且经常将摄像机数据发送到此编码器,而不将其复制到用户空间。