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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值