close
今天宅宅要來教大家寫程式啦!
最近剛好學會開啟手機的相機或圖片庫存取照片,
所以來跟大家分享一下~
一、開相機存取照片
Intent intent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); File tmpFile = new File( Environment.getExternalStorageDirectory(), "image.jpg"); outputFileUri = Uri.fromFile(tmpFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, PICK_FROM_CAMERA);
開啟相機的部分直接使用Intent的方式呼叫相機打開,
tmpFile是給我們拍的照片命名,再它轉成Uri (Uri這部分將會在後面使用到),
開啟Activity的部分不是平常直接用staetActivty,而是使用startActivityForResult,
因為要在拍完照回傳那張照片的資訊,所以需要他return result。
二、開相簿存去圖片
Intent i = new Intent(Intent.ACTION_PICK, null); i.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(i, PICK_FROM_GALLERY);開啟相簿的部分就更簡單啦,我們要去設定我們要開啟的是哪個東西,
在setDataAndType給不同的值就可以拿取不同的資料,
這次我們是要開啟相簿,因此要去的位置就是image啦~
那要拿取回傳值則需要呼叫onActivityResult這個function,
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_FROM_CAMERA || requestCode == PICK_FROM_GALLERY) { if (resultCode == RESULT_OK) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(outputFileUri, "image/*"); intent.putExtra("crop", "true"); //crop = true時就打開裁切畫面 intent.putExtra("aspectX", 1); //aspectX與aspectY是設定裁切框的比例 intent.putExtra("aspectY", 1); intent.putExtra("outputX", 150); //這則是裁切的照片大小 intent.putExtra("outputY", 150); intent.putExtra("return-data", true); startActivityForResult(intent, PICK_FROM_GET); } } else if (requestCode == PICK_FROM_GET) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); int oldwidth = photo.getWidth(); int oldheight = photo.getHeight(); float scaleWidth = 100 / (float) oldwidth; float scaleHeight = 100 / (float) oldheight; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // create the new Bitmap object Bitmap resizedBitmap = Bitmap.createBitmap(photo, 0, 0, oldwidth, oldheight, matrix, true); mAvaterEdit.setImageBitmap(resizedBitmap); } } }
這段有點長,讓我來大致說明一下,
第一個if是從相機或相簿回來時做的事,
拿到照片後,我去開啟裁切相片的畫面,
第二個if是裁切畫面回來時做的,
當拿到裁切後的資料後,
我再去將我拿到得照片去做縮小,
縮放的大小是可以自己訂的,
當然不做縮放是也可以的,
只是如果有做縮放比較不會遇到out of memory的問題。
這次的教學就到此結束啦~
如果有問題歡迎發問,
或者我有說錯的地方也歡迎糾正。
文章標籤
全站熱搜
留言列表