Xamarin.Android 照相机的使用

原创 2015年11月23日 17:56:24

这个板块呢,我想展示如何调用照相机,如何保存其路径,然后在我们imageView里面展示

出来

先上最终效果图(用的是Genymotion模拟器)


新键一个Layout,命名为CameraLayout.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/CameraButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/openCamera" />
    <ImageView
        android:src="@android:drawable/ic_menu_gallery"
        android:layout_width="fill_parent"
        android:layout_height="300.0dp"
        android:id="@+id/imageView1"
        android:adjustViewBounds="true" />
</LinearLayout>

新建一个类,命名为CameraHelper,方法CreateDirectoryForPictures  是判断文件夹是否存在,如果不存在则新建文件夹;

方法LoadandResize则是为了整理图片的大小

  class CameraHelper
    {
        public static File _file;
        public static File _dir;
        public static Bitmap bitmap;


        public static void CreateDirectoryForPictures()
        {
           _dir = new File(
                Android.OS.Environment.GetExternalStoragePublicDirectory(
                    Android.OS.Environment.DirectoryPictures), "CameraAppDemo");
            if (!_dir.Exists())
            {
                _dir.Mkdirs();
            }
        }

        public static Bitmap LoadAndResizeBitmap( string fileName, int width, int height)
        {
            // First we get the the dimensions of the file on disk
            BitmapFactory.Options options = new BitmapFactory.Options { 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;
        }


在我们的Activity中,代码如下

为方便找到我们的界面元素,先定义元素

  private ImageView _imageView;
        private Button button;


        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.CameraLayout);

            CameraHelper.CreateDirectoryForPictures();
            button = FindViewById<Button>(Resource.Id.CameraButton);
            _imageView = FindViewById<ImageView>(Resource.Id.imageView1);
            button.Click += TakeAPicture;

        }

其实呢,应该先判断我们的手机是否存在能照相的应用程序,但是我这里有点问题,到后面我再整理一下

叫起照相机,进行拍照

  private void TakeAPicture(object sender, EventArgs eventArgs)
        {
            var intent = new Intent(MediaStore.ActionImageCapture);
            CameraHelper._file = new File(CameraHelper._dir, string.Format("myPhoto_{0}.jpg", Guid.NewGuid()));
            intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(CameraHelper._file));
            StartActivityForResult(intent, 0);
        }

当程序有返回值时

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);

            //判断可用
            var mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
            var contentUri = Uri.FromFile(CameraHelper._file);
            mediaScanIntent.SetData(contentUri);
            SendBroadcast(mediaScanIntent);


            var height = Resources.DisplayMetrics.HeightPixels;
            var width = _imageView.Height;
            CameraHelper.bitmap = CameraHelper.LoadAndResizeBitmap(CameraHelper._file.Path, width, height);
            if (CameraHelper.bitmap != null)
            {
                _imageView.SetImageBitmap(CameraHelper.bitmap);
                CameraHelper.bitmap = null;
            }
            //释放资源
            GC.Collect();
        }

好了,整个程序就到这里了。








版权声明:本文为博主原创文章,未经博主允许不得转载。

Xamarin.iOS 相机与相册的基本使用

Xamarin.iOS相机与相册权限与裁剪功能以及语言设置
  • geanwen
  • geanwen
  • 2017年01月05日 22:06
  • 1697

Xamarin.iOS-UIImagePickerController调用相机和获取相册列表【控件篇】

1.声明一个对象 private nfloat ScreenWidth = UIScreen.MainScreen.Bounds.Width; private nfloat ScreenHeigh...
  • u014220518
  • u014220518
  • 2016年12月15日 14:30
  • 704

VS2017 xamarin android 使用zxing扫描二维码

  • 2017年11月30日 17:19
  • 36.12MB
  • 下载

Xamarin.Android 关于静态使用Fragment的简单示例

  • 2015年11月12日 10:54
  • 15.15MB
  • 下载

C# xamarin android listview简单使用

  • 2017年11月16日 14:07
  • 33.3MB
  • 下载

xamarin android使用zxing扫描二维码例子

  • 2017年07月07日 01:02
  • 26KB
  • 下载

Android照相机俩种常见的使用方式(一)

Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据。 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,这里我分别对这...
  • ziyang1993
  • ziyang1993
  • 2012年07月12日 20:29
  • 1563

Android照相机俩种常见的使用方式(二)

这次我主要实现调用照相机并且能够在自己设置Activity 上显示此图片,比且当我们照完图片的时候自己可以对照片进行裁剪。 配置文件没有做出改动关键是我们代码的实现,调用手机自带的照相系统,这个最...
  • ziyang1993
  • ziyang1993
  • 2012年07月13日 10:57
  • 625

Android开发中使用照相机功能 及其常见问题解法方法

android 取得camera的照片 其實想在android裡面實現照相的功能,大致上分成兩種, 第一種是自己去implement一個camera介面出來(不難但複雜,較具有彈性) 第二種是直...
  • u010355144
  • u010355144
  • 2015年06月18日 14:36
  • 553

Android 从照相机和相册选择图片使用原生代码裁剪(支持4.4 KIKAT及以上机型)

开发过程中总会遇到选择图片上传,或拍照上传的功能,写了一个支持Android4.4及以上版本也可以使用的统一代码,调用起来很简单,只需要一段代码就可以,下面就把代码贴出来,代码比较粗糙,希望大家指正。...
  • soslinken
  • soslinken
  • 2015年07月02日 16:50
  • 734
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Xamarin.Android 照相机的使用
举报原因:
原因补充:

(最多只允许输入30个字)