mono for android 获取手机照片或拍照并裁剪保存
axml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/btn0" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="从相册中选择照片" /> <Button android:id="@+id/btn1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="拍照" /> <ImageView android:id="@+id/imageID" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
C#
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); } } }
以前的我是没有做笔记的习惯的,学习了后觉得自己能记住,但是最近发现很多学的东西都忘记了,所有现在一有新的知识,就记下来吧。
最近又做一个mono for android 的项目 这次调整比较大,上次做的点餐系统很好用 ,但是做的时候没有做笔记很多东西都忘记了,这次我把项目涉及到的知识传到博客上,方便记忆,也很大家分享分享的,希望大家能给出点意见。——小査