2017-07-19 68 views
0

我使用ImageFormat的相機NV21預覽,當我獲得NV21數據時,我嘗試使用以下方法獲取可顯示給ImageView的字節。爲什麼使用100質量的位圖壓縮變得更小

字體:

public static byte[] n21ToBitmap(byte[] data, Camera camera) { 
    try { 
    Camera.Parameters parameters = camera.getParameters(); 
    Camera.Size size = parameters.getPreviewSize(); 
    YuvImage image = 
     new YuvImage(data, parameters.getPreviewFormat(), size.width, size.height, null); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    image.compressToJpeg(new Rect(0, 0, size.width, size.height), 100, stream); 
    Bitmap originBitmap = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size()); 
    stream.close(); 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(270); 
    Bitmap rotateBitmap = 
     Bitmap.createBitmap(originBitmap, 0, 0, originBitmap.getWidth(), originBitmap.getHeight(), 
      matrix, true); 
    Bitmap temp = rotateBitmap.copy(rotateBitmap.getConfig(), true); 
    Log.e("TAG", "n21ToBitmap(ImageUtils.java:" 
     + Thread.currentThread().getStackTrace()[2].getLineNumber() 
     + ")" 
     + "temp:" 
     + temp.getByteCount()); 
    stream = new ByteArrayOutputStream(); 
    temp.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
    byte[] bytes = stream.toByteArray(); 
    Log.e("TAG", "n21ToBitmap(ImageUtils.java:" 
     + Thread.currentThread().getStackTrace()[2].getLineNumber() 
     + ")" 
     + "bytes:" 
     + bytes.length); 
    return bytes; 
} catch (Exception ex) { 
    Log.e(TAG, "Error:" + ex.getMessage()); 
} 
    return null; 
} 

和日誌:

n21ToBitmap(ImageUtils.java:103)temp: 2073600 
n21ToBitmap(ImageUtils.java:112)bytes:311627 

那麼,爲什麼字節長度成爲smallar?

+1

這是JPG格式的壓縮器:) – Vyacheslav

+0

但是爲什麼當你使用系統相機拍照時,你會得到一個大的圖像?這也是JPG圖片。 – ChengTao

回答

0

查看字節長度是數組的大小,因此每個數組索引都有一些字節值。

byte [] bytes; bytest.length =數組大小;

現在你的數組大小= 20 = bytest.length; 並且每個索引都有一些字節值。 假定每個索引包含1024個Byets。

因此總大小= 20 * 1024,這是你的情況陣列長度的實際尺寸

是311627和每個索引在每一一些字節值 所以總大小= 311627 *值的索引