2012-10-20 4 views
6

私はバイト配列を取得し、そこから別の配列に画像のプレビューwhith onPreviewFrame()のいくつかの行をコピーしようとしています。だから私は、カメラと、新しいバイト配列onPreviewFrameが間違ったバイトを返す[] length

 try { 
     if (cam != null) { 

      Camera.Parameters parameters = cam.getParameters(); 
      parameters.setPreviewFrameRate(25); 
      parameters.setPictureFormat(ImageFormat.JPEG); 
      cam.setParameters(parameters); 
      cam.setPreviewDisplay(holder); 
      cam.startPreview(); 

      arr = new byte[(parameters.getPreviewSize().height) 
        * (parameters.getPreviewSize().width)]; 

      Log.i("" + parameters.getPictureSize().height, " " 
        + parameters.getPictureSize().width); 


     } 
    } catch (IOException e) { 
     Log.d("CAMERA", e.getMessage()); 
    } 

を準備し、ログは私です教えて:

480 640

のでarr.length = 307200

しかし:(その

public void onPreviewFrame(byte[] data, Camera camera) {  
    Log.i(arr.length+" ",data.length+""); 
} 

arr.length = 307200 をコースm EANSフレームサイズ= 640×480)

しかし data.length = 460800 (と、それはフレームサイズ= 800×576を意味する)

そして、私はSystem.arraycopy(data, 0, arr, 0, arr.length);でARRしてから画像をエクスポートするために、データをコピーしよう:

緑になっ
FileOutputStream outStream = null; 
    try { 
     outStream = new FileOutputStream("/sdcard/new.jpg"); 

     Camera.Parameters parameters = cam.getParameters(); 
     Size size = parameters.getPreviewSize(); 

     YuvImage image = new YuvImage(arr, parameters.getPreviewFormat(), 
       size.width, size.height, null); 
     image.compressToJpeg(
       new Rect(0, 0, image.getWidth(), image.getHeight()), 90, 
       outStream); 

     outStream.flush(); 
     outStream.close(); 
    } catch (FileNotFoundException e) { 
     Log.d("CAMERA", e.getMessage()); 
    } catch (IOException e) { 
     Log.d("CAMERA", e.getMessage()); 
    } 

画像:

enter image description here

データ配列を640 * 480にするために必要なことは?あるいは、(例えば)ビットマップから単一行を取得し、それを別のビットマップに追加する別の方法を知っていますか?

答えて

4

正しい配列サイズは new byte[previewSize.height * previewSize.width * (ImageFormat.getBitsPerPixel(parameters.getPreviewFormat()))/8];(異なるフォーマット、異なるビット・パー・ピクセル値を有する、ImageFormat.getBitsPerPixelでそれらを得る)

+0

がそれを手に入れました!ありがとう! – Vitaliy

関連する問題