1. 程式人生 > >mono for android 獲取手機照片或拍照並裁剪儲存

mono for android 獲取手機照片或拍照並裁剪儲存

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

        }

    }
}