解決通過Intent調用系統拍照程式,返回圖片太小的問題[android]

來源:互聯網
上載者:User
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;}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.