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#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | 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); } } }<br><br><br> |
以前的我是没有做笔记的习惯的,学习了后觉得自己能记住,但是最近发现很多学的东西都忘记了,所有现在一有新的知识,就记下来吧。
最近又做一个mono for android 的项目 这次调整比较大,上次做的点餐系统很好用 ,但是做的时候没有做笔记很多东西都忘记了,这次我把项目涉及到的知识传到博客上,方便记忆,也很大家分享分享的,希望大家能给出点意见。——小査
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步