mono for android 獲取手機照片或拍照並裁剪儲存
阿新 • • 發佈:2018-12-27
using System; using Android.App; using Android.Content; using Android.Widget; using Android.OS; using Android.Graphics; using System.IO; namespace Phoot { [Activity(Label = "Phoot", MainLauncher = true, Icon = "@drawable/icon")] public class Activity1 : Activity { public static int NONE = 0; public static int PHOTOHRAPH = 1;//拍照 public static int PHOTOXZOOM = 2;//縮放 public static int PHOTORESOULT = 3;//結果 public static string IMAGE_UNSPECTFIED = "image/*"; ImageView imageview = null; Button button0 = null; Button button1 = null; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); button0 = FindViewById<Button>(Resource.Id.btn0); button1 = FindViewById<Button>(Resource.Id.btn1); imageview = FindViewById<ImageView>(Resource.Id.imageID); button0.Click += new EventHandler(button0_Click); button1.Click += new EventHandler(button1_Click); } //選擇照片 void button0_Click(object sender, EventArgs e) { Intent intent = new Intent(Intent.ActionPick, null); //選擇照片意圖 intent.SetDataAndType( Android.Provider.MediaStore.Images.Media.ExternalContentUri, IMAGE_UNSPECTFIED); StartActivityForResult(intent, PHOTOXZOOM); } //拍照 void button1_Click(object sender, EventArgs e) { Intent intent = new Intent(Android.Provider.MediaStore.ActionImageCapture); string file = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.ToString(),Android.OS.Environment.DirectoryDcim.ToString()+ "/test.jpg"); var outputFileUri = Android.Net.Uri.Parse(file); intent.PutExtra(Android.Provider.MediaStore.ExtraOutput,file); StartActivityForResult(intent, PHOTOHRAPH); } protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { if (requestCode == NONE) { return; } if (requestCode == PHOTOHRAPH) { //獲取照片 Bitmap bitmap = (Bitmap)data.Extras.Get("data"); Java.IO.File picture = new Java.IO.File(Android.OS.Environment.ExternalStorageDirectory.ToString()+"/"+Android.OS.Environment.DirectoryDcim.ToString() + "/test.jpg"); //Java.IO.FileOutputStream b = new Java.IO.FileOutputStream(picture); FileStream MyFileStream1 = new FileStream(picture.ToString(), FileMode.Create); //儲存照片 bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, MyFileStream1); if (System.IO.File.Exists(picture.ToString())) { startPhotoZoom(Android.Net.Uri.FromFile(picture)); } //startPhotoZoom } if (data == null) { return; } if (requestCode == PHOTOXZOOM) { startPhotoZoom(data.Data); } //處理結果 if (requestCode == PHOTORESOULT) { Bundle extras = data.Extras; if (extras != null) { Bitmap photo = (Bitmap)extras.GetParcelable("data"); //Stream stream = null; //壓縮檔案 //photo.Compress(Bitmap.CompressFormat.Jpeg, 75, stream); imageview.SetImageBitmap(photo); } } base.OnActivityResult(requestCode, resultCode, data); } //縮放 public void startPhotoZoom(Android.Net.Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.SetDataAndType(uri, IMAGE_UNSPECTFIED); intent.PutExtra("crop", true); //// aspectX aspectY 是寬高的比例 intent.PutExtra("aspectX", 1); intent.PutExtra("aspectY", 1); //// outputX outputY 是裁剪圖片寬? intent.PutExtra("outputX", 100); intent.PutExtra("outputY", 100); intent.PutExtra("return-data", true); StartActivityForResult(intent, PHOTORESOULT); } } }