2011-10-28 52 views
3

我有一個攝像頭活動。我的活動將拍攝一張照片,然後我有一個AsyncTask將照片保存到設備。這裏是我的代碼:Android如何以字節數組格式調整圖像

class SavePhotoTask extends AsyncTask<byte[], String, String> { 

    private ProgressDialog dialog; 

    // protected Context applicationContext; 

    @Override 
    public void onPreExecute() { 

     dialog = new ProgressDialog(CameraPreviewActivity.this); 

     dialog.setMessage("gravando..."); 
     dialog.show(); 

    } 

    @Override 
    protected String doInBackground(byte[]... jpeg) { 

     try { 

      int i =jpeg[0].length; 
      System.out.println("byte array size"+i); 

      String timeStamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date()); 

      Random generator2 = new Random(10000); 
      int r=generator2.nextInt(99999); 
      File cacheDir = getDir(DIRECTORIO, Context.MODE_PRIVATE); 
      String filename = timeStamp+"-" +r+ ".jpg"; 
      File file = new File(cacheDir, filename); 

      FileOutputStream stream = new FileOutputStream(file); 
      //FileOutputStream fos = new FileOutputStream(photo.getPath()); 
      stream.write(jpeg[0]); 
      stream.close(); 

      long t=file.length(); 
      System.out.println("file size"+t); 
     } catch (java.io.IOException e) { 
      Log.e("PictureDemo", "Exception in photoCallback", e); 
     } 

     return (null); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     this.dialog.cancel(); 

    } 
} 

(這個類是從一個在CommonsWare書(高級Android開發)

所以SavePhotoTask接收的字節數組格式的圖像(字節[]的修改),並保存它在一個文件中 我想要做的是調整它的大小(小於150K),然後保存它,如果可能的話。我知道我可以創建一個位圖,但有沒有辦法直接壓縮字節數組?我可以使用的類。

這是調整位圖大小的代碼:

Bitmap thumbnail=BitmapFactory.decodeByteArray(jpeg[0], 0, jpeg[0].length) 
thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
     stream.close(); 
     long t=file.length(); 
     if(t>Constants.MAX_FILE_SIZE){ 
      stream = new FileOutputStream(file); 
      thumbnail.compress(Bitmap.CompressFormat.JPEG, 75, stream); 
      stream.close(); 
      t=file.length(); 
      int i=50; 
      while(t>Constants.MAX_FILE_SIZE && i>=0){ 
       stream = new FileOutputStream(file); 
       thumbnail.compress(Bitmap.CompressFormat.JPEG, i, stream); 
       stream.close(); 
       i=i-5; 
       t=file.length(); 
      } 

     } 

有沒有一種方法可以創建更好的東西,當然還有使用最少的內存資源。非常感謝

回答

0

可能是我錯了,但我認爲你不能壓縮JPEG格式的已壓縮數據。如果您要壓縮已壓縮的數據,稍後將無法解碼這些數據。 我認爲你應該考慮改變圖像尺寸。您可以增加圖像的寬度和高度,這會增加圖像文件的大小。

相關問題