در این آموزش به نحوه ثبت تصویر و ذخیره آن در حافظه گوشی با زبان برنامه نویسی سی شارپ خواهیم پرداخت.
برای شروع یک پروژه از نوع اندروید با نام Camera باتوجه به شکل زیر ایجاد میکنیم.
در این مرحله
فایل Main.axml را باز میکنیم و یک دکمه و یک کنترل Imageview درون آن قرار می دهیم . با توجه به شکل زیر :
در این مرحله دسترسی های CAMERA و WRITE_EXTERNAL_STORAGEرا به فایل AndroidManifest.xml اضافه میکنیم.
کدهای Main.xaml بصورت زیر میباشد.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="ثبت تصویر"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnPic" />
<ImageView
android:src="@android:drawable/ic_menu_gallery"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView1" />
</LinearLayout>
کلاس MainActivity را بصورت زیر ویرایش نمایید.
ImageView img;
Button btn;
string path = "";
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
btn = FindViewById<Button>(Resource.Id.btnPic);
img = FindViewById<ImageView>(Resource.Id.imageView1);
btn.Click += Btn_Click;
}
private void Btn_Click(object sender, System.EventArgs e)
{
Random r = new Random();
int ID = r.Next(1, int.MaxValue);
path = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "AppImages");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
path = System.IO.Path.Combine(path, "AppImages" + ID + ".jpg");
//********************************************************************
Android.Content.Intent Cam = new Android.Content.Intent(MediaStore.ActionImageCapture);
Android.Content.PM.PackageManager package = PackageManager;//امکانات دستگاه را میگیریم
IList<ResolveInfo> Activities = package.QueryIntentActivities(Cam, 0);
if (Activities.Count > 0)//آیای دوربینی پیدا شد؟
{
Java.IO.File imageFileUri = new Java.IO.File(path);
Android.Net.Uri imageUrl = Android.Net.Uri.FromFile(imageFileUri);
Cam.PutExtra(MediaStore.ExtraOutput, imageUrl);
Cam.PutExtra(MediaStore.ExtraSizeLimit,600*800);
StartActivityForResult(Cam,ID);
}
else
{
Toast.MakeText(this, "دوربین یافت نشد", ToastLength.Long).Show();
}
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)//جهت برگشت از تصویر ثبت شده دوربین به سمت برنامه
{
if (resultCode == Result.Ok)
{
Java.IO.File ImageFile = new Java.IO.File(path);
Bitmap image= BitmapFactory.DecodeFile(ImageFile.Path);
img.SetImageBitmap(image);
if (image != null)
image.Dispose();
}
else
{
Toast.MakeText(this, "تصویر را انتخاب نمایید", ToastLength.Long).Show();
}
base.OnActivityResult(requestCode, resultCode, data);
}
توضیحات در داخل کدهای برنامه قرار داده شده است .
تنها نکته ای که لازم دانستم در مورد آن توضیح دهم تابع OnActivityResult میباشد که در واقع این تابعی زمانی که کاربر با فشردن دکمه ثبت تصویر برنامه را به سمت دوربین گوشی هدایت کرد و پس از بازگشت عملیات ثبت تصویر توسط دوربین این تابع بصورت خودکار توسط برنامه جهت دریافت تصویر ثبت شده توسط دوربین گوشی فراخوانی میشود.
اکنون برنامه را اجرا نمایید.