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); } } } |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。