2012-11-02 68 views
0

您好,我正在開發一個攝像機應用程序。拍攝圖像後,圖像將保存在SD卡中。我想要保存在SD卡中的圖像大小應該是400kb到500kb,但現在它需要超過1mb。捕捉圖像後如何壓縮並保存在SD卡中。在Android中拍攝圖像時壓縮圖像

我的代碼是

public void onClick(View v) { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      imageName="MyCameraApp" + String.valueOf(System.currentTimeMillis()) + ".jpg"; 
      File file = new File(Environment.getExternalStorageDirectory()+"/pictures", imageName); 
      fileUri = Uri.fromFile(file); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name 

      startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

     } 

回答

0

試試這個:

String root = Environment.getExternalStorageDirectory() 
        .toString(); 
      File myDir = new File(root + "/_images"); 
      myDir.mkdirs(); 
      Random generator = new Random(); 
      int n = 10000; 
      n = generator.nextInt(n); 
      String fname = "Image-" + n + ".jpg"; 
      file = new File(myDir, fname); 
      Log.i(TAG, "" + file); 
      if (file.exists()) 
       file.delete(); 
      try { 
       FileOutputStream out = new FileOutputStream(file); 
       bm.compress(Bitmap.CompressFormat.JPEG, 90, out); 
       out.flush(); 
       out.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

其中BM爲位圖圖像

2

我面臨同樣的問題,現在我固定它。我認爲這會對你有所幫助。如果你改變你的SD卡的目錄,我認爲這段代碼可以正常工作。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_image_optimization); 

    String dirname = Environment.getExternalStorageDirectory() + "/shahin/"; 

    File sddir = new File(dirname); 
    if (!sddir.mkdirs()) { 
     if (sddir.exists()) { 
     } else { 
      Toast.makeText(ImageOptimizationActivity.this, "Folder error", Toast.LENGTH_SHORT) 
        .show(); 
      return; 
     } 
    } 

    try { 
     Bitmap bitmap = null; 
     File file = new File(Environment.getExternalStorageDirectory() 
       + "/DCIM/101SHARP/rubon.jpg"); 
     try { 
      bitmap = BitmapFactory.decodeStream(new FileInputStream(file)); 
     } catch (FileNotFoundException e1) { 
      e1.printStackTrace(); 
     } 

     FileOutputStream fos = new FileOutputStream(dirname + "output.jpg"); 
     bitmap.compress(CompressFormat.JPEG, 75, fos); 

     fos.flush(); 
     fos.close(); 
    } catch (Exception e) { 
     Log.e("MyLog", e.toString()); 
    } 
} 

}