take a picture
new project, c#, android, single view app
Open Solution Explorer-> Project Name->Resources->Layout->Main.axml. Click Open Design View
solution explorer, resources, main.axml code :
Go to Solution Explorer-> Project Name. Right click to Add->Class, followed by opening new Dialog box. This dialog box is required to select the class and give name for BitmapHelpers.cs.
Open Solution Explorer-> Project Name->Resources-> BitmapHelpers.cs. This class is reducing the image size and recycling the memory. It will be used to calculate an image ratio.
code
Open Solution Explorer-> Project Name->Resources-> MainActicity.cs. Add code, given below-
run app
new project, c#, android, single view app
Open Solution Explorer-> Project Name->Resources->Layout->Main.axml. Click Open Design View
solution explorer, resources, main.axml code :
Code:
<?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">
<ImageView
android:id="@+id/imageView"
android:layout_weight="9"
android:layout_width="match_parent"
android:layout_height="fill_parent" />
<Button
android:layout_weight="1"
android:id="@+id/btnCamera"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Open Camera" />
</LinearLayout>
Go to Solution Explorer-> Project Name. Right click to Add->Class, followed by opening new Dialog box. This dialog box is required to select the class and give name for BitmapHelpers.cs.
Open Solution Explorer-> Project Name->Resources-> BitmapHelpers.cs. This class is reducing the image size and recycling the memory. It will be used to calculate an image ratio.
code
Code:
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;
}
}
}
Open Solution Explorer-> Project Name->Resources-> MainActicity.cs. Add code, given below-
Code:
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Telephony;
using Android.Provider;
using Java.IO;
using Android.Graphics;
using Android.Content.PM;
using Uri = Android.Net.Uri;
using System.Collections.Generic;
using Camera;
namespace TheInternship
{
[Activity(Label = "TheInternship", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
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.btnCamera);
ImgView = FindViewById<ImageView>(Resource.Id.imageView);
BtnTakeImg.Click += TakeAPicture;
}
}
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
}
}
}
}
}
run app