2015-09-22 38 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()?我正在嘗試拍攝文件並上傳。因此文件必須是可讀的。 –