【WP7】关于相机应用程序

摘要:
在WPOS7.1中,我们可以通过编程访问设备摄像头。我们可以访问一些API来通过相机获取图像。1.在屏幕上显示摄像机获取的图像。创建新画布以显示由相机获取的图像数据<Canvasx:Name=“cameraViewCanvas”Width=“400”Margin=“28,4,28284”>&书信电报;帆布背景>&书信电报;VideoBrushx:南

在WP OS7.1中,允许我们通过编程的方式访问设备相机,可以通过访问部分API通过相机获取图像

1、把相机获取图像显示在屏幕上

  新建一个画布,用于显示相机获取到的图像数据 

<Canvas x:Name="cameraViewCanvas" Width="400" Margin="28,4,28,284">
    <Canvas.Background>
        <VideoBrush x:Name="cameraVideoBrush" />
    </Canvas.Background>
</Canvas>

2、新建一个 相机设备 的实例,通过该实例访问相机设备,新建一个MediaLibrary 用于访问系统的媒体资源

首先需要包含命名空间(解析MediaLibrary时要先引用Microsoft.Xna.Framework命名空间)

  using using Microsoft.Devices;
  using Microsoft.Xna.Framework.Media;

  PhotoCamera cam;
       MediaLibrary library = new MediaLibrary();

3、初始化相机设备(后置摄像头)和画布画刷,一般放在页面的初始化或 OnNavigatedTo 函数里 

if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary))
{
    cam = new PhotoCamera(CameraType.Primary);
    cam.Initialized += new EventHandler<CameraOperationCompletedEventArgs>(cam_Initialized);
    cam.CaptureCompleted += new EventHandler<CameraOperationCompletedEventArgs>(cam_CaptureCompleted);
    cam.CaptureImageAvailable += new EventHandler<ContentReadyEventArgs>(cam_CaptureImageAvailable);
    cam.CaptureThumbnailAvailable += new EventHandler<ContentReadyEventArgs>(cam_CaptureThumbnailAvailable);
    cameraVideoBrush.SetSource(cam);
}

   CameraType.FrontFacing表示前置摄像头(使用前判断是否支持)

注意:应该在页面退出时释放掉相机设备资源,注销事件,一般放在 OnNavigatedFrom 函数里面

if (cam != null)
{
    cam.Dispose();
    cam.Initialized -= cam_Initialized;
    cam.CaptureCompleted -= cam_CaptureCompleted;
    cam.CaptureImageAvailable -= cam_CaptureImageAvailable;
    cam.CaptureThumbnailAvailable -= cam_CaptureThumbnailAvailable;
}

4、接下来是事件函数

  cam_Initialized           相机初始化完成后执行

  cam_CaptureImageAvailable    当有图像可用时发生

  cam_CaptureThumbnailAvailable  当有缩略图图像可用时发生

  cam_CaptureCompleted      拍摄完成时发生 

【WP7】关于相机应用程序第1张【WP7】关于相机应用程序第2张View Code
        void cam_Initialized(object sender, CameraOperationCompletedEventArgs e)
        {
        }

        void cam_CaptureThumbnailAvailable(object sender, ContentReadyEventArgs e)
        {
        }

        void cam_CaptureImageAvailable(object sender, ContentReadyEventArgs e)
        {
            string fileName = "image.jpg";
            //保存图像到CameraRoll里
            library.SavePictureToCameraRoll(fileName, e.ImageStream);

            //保存图像到独立存储空间
            using (IsolatedStorageFile isStore = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream targetStream = isStore.OpenFile(fileName, FileMode.Create, FileAccess.Write))
                {
                    byte[] readBuffer = new byte[4096];
                    int bytesRead = -1;

                    while ((bytesRead = e.ImageStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
                    {
                        targetStream.Write(readBuffer, 0, bytesRead);
                    }
                }
            }
            //关闭流
            e.ImageStream.Close();
        }

        void cam_CaptureCompleted(object sender, CameraOperationCompletedEventArgs e)
        {
        }

     到这里,相机设备初始化完成了,接下来是对相机资源的操作

1、拍摄图片:

  cam.CaptureImage();

2、闪光灯设置

  cam.FlashMode = FlashMode.On;

3、缩略图分辨率设置(分辨率大小必须是相机设备支持的分辨率)

    //获取设备支持的分辨率
    IEnumerable<Size> resList = cam.AvailableResolutions;
    int resCount = resList.Count<Size>();
    Size res;

    if(resCount >= 1)
    {
        //根据需要选择不同的分辨率,这里选择第一个
        res = resList.ElementAt<Size>(0);
    }

    //设置分辨率
    cam.Resolution = res;

4、对焦

  if (cam.IsFocusSupported)
  {
    cam.Focus();

    //cam.FocusAtPoint(0.5, 0.5);
  }

5、访问快门按钮

快门按钮的访问是通过 CameraButtons 类中的一系列事件管理的

CameraButtons 类的三个事件

  ShutterKeyHalfPressed    半按快门且持续800ms以上

  ShutterKeyPressed      全按快门

  ShutterKeyReleased      松开快门

在相机设备初始化时注册这三个事件,不用生存CameraButtons类的实例,它是一个static类 

    CameraButtons.ShutterKeyHalfPressed += new EventHandler(CameraButtons_ShutterKeyHalfPressed);
    CameraButtons.ShutterKeyPressed += new EventHandler(CameraButtons_ShutterKeyPressed);
    CameraButtons.ShutterKeyReleased += new EventHandler(CameraButtons_ShutterKeyReleased);

同样的,在离开页面的时候,注销这三个事件

    CameraButtons.ShutterKeyHalfPressed -= CameraButtons_ShutterKeyHalfPressed;
    CameraButtons.ShutterKeyPressed -= CameraButtons_ShutterKeyPressed;
    CameraButtons.ShutterKeyReleased -= CameraButtons_ShutterKeyReleased;

实现三个事件函数

【WP7】关于相机应用程序第3张【WP7】关于相机应用程序第4张View Code
    void CameraButtons_ShutterKeyReleased(object sender, EventArgs e)
    {
        if (cam != null)
        {
            cam.CancelFocus();
        }
    }

    void CameraButtons_ShutterKeyPressed(object sender, EventArgs e)
    {
        if (cam != null)
        {
            cam.CaptureImage();
        }
    }

    void CameraButtons_ShutterKeyHalfPressed(object sender, EventArgs e)
    {
        if (cam != null)
        {
            cam.Focus();
        }
    }

免责声明:文章转载自《【WP7】关于相机应用程序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android studio 3.1.4下载安装配置(附旧版本下载地址)Java课程设计--学生成绩管理系统下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubuntu 16.04 安装摄像头驱动usb_cam

!!需要在ROS平台上安装 ROS见 https://www.cnblogs.com/haijian/p/8782560.html cd ~/catkin_ws/src 下载usb_cam包 git clone https://github.com/bosch-ros-pkg/usb_cam.git usb_cam 编译 cd .. catkin_make...

每次都能让人头大的 Shader -- 从一次简单的功能说起

  最近有个功能, 要渲染从主相机视角看到的另一个相机的可视范围和不可见范围, 大概如下图 :    简单来说就是主相机视野和观察者相机视野重合的地方, 能标记出观察者相机的可见和不可见, 实现原理就跟 ShadowMap 一样, 就是有关深度图, 世界坐标转换之类的, 每次有此类的功能都会很悲催, 虽然它的逻辑很简单, 可是用Unity3D做起来很麻烦...

生物数据库与在线工具

生物数据库       生物数据库是收集自科学实验、出版文献、高通量实验技术和计算分析等生命科学信息库,它包含来自基因组学、蛋白质组学、代谢组学、微阵列基因表达和系统发育学等领域的信息。       生物数据库大致可分为序列、结构和功能数据库。序列数据库储存核酸和蛋白质序列;结构数据库储存RNA和蛋白质的结构信息;功能数据库提供关于基因产物的生理作用信息(...

Away3D基础之摄像机

转自:http://blog.csdn.net/cceevv/article/details/8571860 原英文地址:http://www.flashmagazine.com/Tutorials/detail/away3d_basics_the_cameras/ 翻译原文地址:http://blog.csdn.net/liminxin272/artic...

61 相机投影原理、相机模型中的坐标系统以及标定方法

0 引言   世界坐标系下的点如何投影到CCD镜头上,通过成像的方式得到点在二维图像上的像素坐标值,这是摄影测量中的一个基础而核心的问题。这个问题中核心的东西有两个:1、坐标系的定义及其空间转换矩阵  2、成像中的误差 下面将从这两个角度对这个问题进行详细探讨。文章参考了 # 陈建平: 《相机成像原理》PPThttps://blog.csdn.net/...

SecureCrt使用SSH2登陆海康相机

海康相机登陆SSH2: 1.安装SecureCRT2.登陆到相机,系统-安全管理-安全服务,勾选启用SSh3,打开SecureCRT,快速链接4.选择协议SSh2,主机Ip填入相机IP,端口默认22,用户名admin,点击链接5.弹出一个框,输入相机的密码6.登陆成功,出现linux的命令行摸样7.点击下面(或者直接输入outputOpen)的output...