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);
}
}
} |