ساخت یک برنامه دوربین ساده در Xamarin

در این مقاله، در تکنولوژی زامارین، یک برنامه دوربین می نویسیم (که کاملا مشابه دوربین اصلی دستگاه عمل می کند) و تصاویر گرفته شده با استفاده از این دوربین را در تصاویر گالری نمایش می دهیم .

ساخت یک برنامه دوربین ساده در Xamarin

مرحله 1- از مسیر زیر، یک پروژه جدیدایجاد کنید.

Visual Studio->New Project->Templates->Visual C#->Android->Blank app

برای پروژه خودتان، یک نام و محل ذخیره سازی انتخاب کنید.

مرحله2- از مسیر زیر ، فایل Main.axml را باز کنید.

Solution Explorer-> Project Name->Resources->Layout->Main.axml

بر روی بخش Design View کلیک کنید

مرحله3- به نوار ابزار بروید و یک دکمه و یک ImageView به درون صفحه بکشید و بیاورید.

مرحله4 - بر روی نام پروژه، کلیک راست کرده و گزینه Add->Class را بزنید. در پنجره جدیدی که باز می شود، class را انتخاب کرده و نام آن را BitmapHelpers.cs بگذارید.

مرحله 5 - به کلاس BitmapHelpers.cs بروید. این کلاس، سایز تصاویر را کاهش می دهد و به این ترتیب، میزان استفاده از حافظه را متعادل می کند. از این کلاس برای محاسبه ی ratio مربوط به یک تصویر استفاده می کنیم.

کد #C

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using Android.App;  
    using Android.Content;  
    using Android.OS;  
    using Android.Runtime;  
    using Android.Views;  
    using Android.Widget;  
    using Android.Graphics;  
    using Android.Graphics.Drawables;  
    namespace Camera {  
        public static class BitmapHelpers {  
            /// This method will recyle the memory help by a bitmap in an ImageView  
            public static void RecycleBitmap(this ImageView imageView) {  
                    if (imageView == null) {  
                        return;  
                    }  
                    Drawable toRecycle = imageView.Drawable;  
                    if (toRecycle != null) {  
                        ((BitmapDrawable) toRecycle).Bitmap.Recycle();  
                    }  
                }  
                /// Load the image from the device, and resize it to the specified dimensions.  
            public static Bitmap LoadAndResizeBitmap(this string fileName, int width, int height) {  
                // First we get the the dimensions of the file on disk  
                BitmapFactory.Options options = new BitmapFactory.Options {  
                    InPurgeable = true,  
                        InJustDecodeBounds = true  
                };  
                BitmapFactory.DecodeFile(fileName, options);  
                // Next we calculate the ratio that we need to resize the image by  
                // in order to fit the requested dimensions.  
                int outHeight = options.OutHeight;  
                int outWidth = options.OutWidth;  
                int inSampleSize = 1;  
                if (outHeight > height || outWidth > width) {  
                    inSampleSize = outWidth > outHeight ? outHeight / height : outWidth / width;  
                }  
                // Now we will load the image and have BitmapFactory resize it for us.  
                options.InSampleSize = inSampleSize;  
                options.InJustDecodeBounds = false;  
                Bitmap resizedBitmap = BitmapFactory.DecodeFile(fileName, options);  
                return resizedBitmap;  
            }  
        }  
    }  

مرحله 6 - به مسیر Solution Explorer-> Project Name->Resources-> MainActicity.cs بروید و فضای نام زیر را اضافه کنید.

using Android.Provider;  
using Java.IO;  
using Android.Graphics;  
using Android.Content.PM;  
using Uri = Android.Net.Uri;  
using System.Collections.Generic;

مرحله 7- ابتدا مطابق زیر، دکمه و متغیرهای مربوط به تصویر را تعریف کرده و سپس Oncreate() را باز کنید.

کد #C

    Button BtnTakeImg;  
    ImageView ImgView;  
    public static File _file;  
    public static File _dir;  
    protected override void OnCreate(Bundle bundle)  
    {  
        base.OnCreate(bundle);  
        // Set our view from the "main" layout resource  
        SetContentView(Resource.Layout.Main);  
        if (IsThereAnAppToTakePictures()) {  
            CreateDirectoryForPictures();  
            BtnTakeImg = FindViewById < Button > (Resource.Id.btntakepicture);  
            ImgView = FindViewById < ImageView > (Resource.Id.ImgTakeimg);  
            BtnTakeImg.Click += TakeAPicture;  
        }  
    }  

مرحله 8 - ما همچنین IsThereAnAppToTakePictures()  و CreateDirectoryForPictures() را ایجاد می کنیم.

مرحله 9 - در اینجا از createDirectoryForPictures() برای ایجاد یک پوشه جداگانه برای تصاویر مان استفاده کرده ایم. IsThereAnAppToTakePictures() برای هدایت به مسیر Android Camera ایجاد شده است.

کد #C

    private void CreateDirectoryForPictures() {  
        _dir = new File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures), "C#Corner");  
        if (!_dir.Exists()) {  
            _dir.Mkdirs();  
        }  
    }  
    private bool IsThereAnAppToTakePictures() {  
        Intent intent = new Intent(MediaStore.ActionImageCapture);  
        IList < ResolveInfo > availableActivities = PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);  
        return availableActivities != null && availableActivities.Count > 0;  
    }  
    private void TakeAPicture(object sender, EventArgs eventArgs) {  
        Intent intent = new Intent(MediaStore.ActionImageCapture);  
        _file = new File(_dir, string.Format("Image_{0}.jpg", Guid.NewGuid()));  
        intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(_file));  
        StartActivityForResult(intent, 102);  
    }  
    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) {  
        if (requestCode == 102 && resultCode == Result.Ok) {  
            // make it available in the gallery  
            Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);  
            Uri contentUri = Uri.FromFile(_file);  
            mediaScanIntent.SetData(contentUri);  
            SendBroadcast(mediaScanIntent);  
            //Converstion Image Size  
            int height = ImgView.Height;  
            int width = Resources.DisplayMetrics.WidthPixels;  
            using(Bitmap bitmap = _file.Path.LoadAndResizeBitmap(width, height)) {  
                //View ImageView  
                ImgView.RecycleBitmap();  
                ImgView.SetImageBitmap(bitmap);  
                //Upload Image in Database  
            }  
        }  
    }  

مرحله 10- در نهایت، مطابق زیر مجوز های لازم را در AndroidManifest.XML تنظیم کنید. 

    <uses-permission android:name="android.permission.CAMERA" />  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />   

مرحله 11- برنامه را اجرا کنید تا بتوانید خروجی را ببینید.

بعد از اجرای برنامه ، می توانید تصاویری که گرفتید را در گالری مشاهده نمایید.

دوره های آموزشی زامارین 

دوره برنامه نویسی اندروید با سی شارپ ( Xamarin )

آموزش متریال دیزاین در زامارین

آموزش Xamarin Forms

دوره Xamarin Form پیشرفته

فایل های ضمیمه