2015-09-22 39 views
1

为什么onPictureTaken(byte [] data,Camera camera)和onPreviewFrame(byte [] data,Camera camera)的数据字节数组大小不同。前者具有原始图像,因此给我一个清晰的图像,后者给了我一个像素化的图像。我没有使用onPictureTaken,因为它有时不会被触发。 如果我的照片尺寸为1600×1400的屏幕尺寸为800×480 onPictureTaken给了我1600×1400 和 onPreviewFrame给了我800×480onPictureTaken和onPreviewFrame上的数据字节数组大小不同

这是我的代码:

mCamera.setOneShotPreviewCallback(new Camera.PreviewCallback() { 
      @Override 
      public void onPreviewFrame(byte[] data, Camera camera) { 
       Camera.Parameters parameters = camera.getParameters(); 
       int format = parameters.getPreviewFormat(); 
       //YUV formats require more conversion 
       if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16) { 
        int w = parameters.getPreviewSize().width; 
        int h = parameters.getPreviewSize().height; 
        // Get the YuV image 
        YuvImage yuv_image = new YuvImage(data, format, w, h, null); 
} 

我有一直困扰着这个问题一个星期。

P.S. - 在负的评分的情况下,请说明理由

回答

0

为什么数据字节数组的大小为onPictureTaken(字节[]数据,摄像机摄像机)和onPreviewFrame(字节[]数据,摄像机摄像机)不同。

因为它们是不同分辨率的不同图像在不同的编码。这将是一个小小的奇迹,如果他们大小相同。

前者具有原始图像,因此给了我一个干净的形象,而后者给了我一个像素图像

预览帧通常是低质量的,因为它们需要在高被抓获速度。

我不使用onPictureTaken,因为它不会有时

触发虽然我也遇到过与相机API的许多问题,是不是其中之一。

onPreviewFrame给了我800×480

您在setPreviewSize() on Camera.Parameters指定预览分辨率。

+0

有没有办法将编码的onPreviewFrame数组转换为onPictureTaken?最大支持的预览尺寸是800 x 480.在姜饼有时很少onPictureTaken没有触发。 –

+1

@Rohit_Ramkumar:“有没有办法将编码的onPreviewFrame数组转换为onPictureTaken?” - 'onPictureTaken()'是一种方法。无法将预览图像转换为Java方法。 “并且最大支持的预览尺寸为800 x 480” - 可能在您的设备上,但预览尺寸因设备而异。 – CommonsWare

+0

唯一的解决方案是onPictureTaken()?我正在尝试拍摄文件并上传。因此文件必须是可读的。 –