2011-03-25 14:18轉載自 hi_android最終編輯 hi_android
以下的代碼可以調用系統的拍照程式,
12 |
Intent it = newIntent("android.media.action.IMAGE_CAPTURE");startActivityForResult(it, Activity.DEFAULT_KEYS_DIALER); |
按下拍照鍵後,會返回到你的activity,所以你的activity要在onActivityResult方法裡加一個處理,
12345678910111213 |
protectedvoidonActivityResult(intrequestCode, intresultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try{ Bundle extras = data.getExtras(); Bitmap b = (Bitmap) extras.get("data"); take = b; ImageView img = (ImageView)findViewById(R.id.image); img.setImageBitmap(take); }catch(Exception e){ }} |
但是這樣你會發現這個bitmap尺寸太小了。明顯是被壓縮過了,要像返回未被壓縮的照片,那麼你要給調用系統拍照程式intent加上參數,指定圖片輸出的位置。
123 |
Intent it = newIntent("android.media.action.IMAGE_CAPTURE");it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(newFile(F.SD_CARD_TEMP_PHOTO_PATH)));startActivityForResult(it, Activity.DEFAULT_KEYS_DIALER); |
這樣就是大圖片返回了。
123456789101112 |
protectedvoidonActivityResult(intrequestCode, intresultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try{ ImageView img = (ImageView)findViewById(R.id.image); take = U.ResizeBitmap(U.getBitmapForFile(F.SD_CARD_TEMP_PHOTO_PATH), 640); img.setImageBitmap(take); imgflag = true; }catch(Exception e){ }} |
另外注意一下,返回的那個bitmap會很大,你用完以後要把它回收掉,不然你很容易記憶體報oom錯誤
1234567891011121314151617 |
publicstaticBitmap ResizeBitmap(Bitmap bitmap, intnewWidth) { intwidth = bitmap.getWidth(); intheight = bitmap.getHeight(); floattemp = ((float) height) / ((float) width); intnewHeight = (int) ((newWidth) * temp); floatscaleWidth = ((float) newWidth) / width; floatscaleHeight = ((float) newHeight) / height; Matrix matrix = newMatrix(); // resize the bit map matrix.postScale(scaleWidth, scaleHeight); // matrix.postRotate(45); Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); bitmap.recycle(); returnresizedBitmap;} |
|