Android预览相机返回不完整的数据阵列

时间:2014-08-06 22:21:57

标签: java android camera

我试图通过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获取这些数据?

1 个答案:

答案 0 :(得分:1)

显然,不支持1920x1080。如果getSupportedPreviewSizes()列表确实包含此解决方案,则这不是第一次设备报告不正确。例如,Galaxy Nexus声称支持QVGA(320x240)预览,但它无法提供此类图像。 setPreviewSize()+ setParameters()继续正确,甚至getPreviewSize()报告预期值。但预览回调会返回与设置此分辨率之前的大小相同的图像。

所以,我希望你真的收到一张1280x720的图片,并且对此无能为力。

请注意,仍然可以在此设备上录制1920x1080视频:录像机可能使用涉及硬件编码器的特殊机制,并且经常将摄像机数据发送到此编码器,而不将其复制到用户空间。