最近在研究可以開啟手機相機功能,拍完照取出照片的方法。爬了許多文章,發現光是開啟相機前置處理就會影響取出相片時的處理方法。
最基本的調用相機方法:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
Intent intent = new Intent(MediaStore.ACTIONIMAGECAPTURE); 這行就是利用intent去開啟Android的照相機介面,再然後拍完照,即呼叫onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bitmap mbmp = (Bitmap) data.getExtras().get("data");
imgMicro.setImageBitmap(mbmp);
}
}
而(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 是縮圖的長度
留言列表