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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章