2016年6月23日 星期四

Andorid 即時產生照片


(Bitmap) data.getExtras().get("data"); 就可以取到照片的"縮圖",沒有錯!只是縮圖。官方文件有說明,android系統分配給每個應用程式的最大內存記憶體是16M,為了防止佔用內存記憶體過大(OutOfMemory),所以把相機拍完回傳的照片經過壓縮。但是我想要再拍完照後可以直接取到原圖,有許多前輩對於這樣情況,對於叫用相機前startActivityForResult(intent, 0); 做了一些修改。
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File tmpFile = new File(Environment.getExternalStorageDirectory(),"image.jpg");
Uri outputFileUri = Uri.fromFile(tmpFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 0);

File tmpFile = new File(Environment.getExternalStorageDirectory(),"image.jpg"); 這行是利用tmpFile先新增一張照片,在開啟Android的照相機介面時,把這張照片指定為輸出檔案位置。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if (resultCode == RESULT_OK) {
          Bitmap bitmap = BitmapFactory.decodeFile(Environment
          .getExternalStorageDirectory() + "/image.jpg");
          imgLarge.setImageBitmap(bitmap);
     }
}


拍完照將結果回傳時,可以透過 Environment.getExternalStorageDirectory() + "/image.jpg" 取得我們指定的圖片路徑。這時侯Intent data則取不到縮圖資料了,若想要取得縮圖就要自己用bitmap原圖去產生縮圖。
Bitmap minibm = ThumbnailUtils.extractThumbnail(bitmap, minWidth, minHeight);
  • minWidth 是縮圖的寬度
  • minHeight 是縮圖的長度

沒有留言:

張貼留言