windows phone 使用相机并获取图片

简介:

使用相机需要引用如下命名空间

using Microsoft.Phone.Tasks;

 在这个案例中我们还用到了BitmapImage类,所以我们需要引用命名空间

using System.Windows.Media.Imaging;

 效果图如下

 

 MainPage.xaml文件在初始化的基础上添加了两个元素

<TextBlock x:Name= " txtName " Text= " 启动相机 " Grid.Row= " 1 " ></TextBlock>
        <Image x:Name= " img " Grid.Row= " 1 " Margin= " 12,10,12,0 " ></Image>

 代码隐藏文件

 

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
//引用
using System.Windows.Media.Imaging;
using Microsoft.Phone.Tasks;

namespace CameraShoot
{
    public partial class MainPage : PhoneApplicationPage
    {
        //相机捕获任务实例
        CameraCaptureTask cameraCT = new CameraCaptureTask();
        // 构造函数
        public MainPage()
        {
            InitializeComponent();
            //手机拍照功能完成后调用
            cameraCT.Completed += new EventHandler<PhotoResult>(cameraCT_Completed);
        }
        //重写触摸屏事件
        protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
        {
            //知识点①
            if (e.OriginalSource==txtName)
            {
                //调用相机
                cameraCT.Show();
            }
            //知识点②
            
//触摸事件完成 
            e.Complete();
            //知识点③
            
//不在向父元素传递
            e.Handled = true;
            //知识点④
            base.OnManipulationStarted(e);
        }
        //完成
        void cameraCT_Completed(object sender, PhotoResult e)
        {
            if (e.TaskResult==TaskResult.OK)
            {
                BitmapImage bmp = new BitmapImage();
                //知识点⑤
                
//获取包含文件流的和Source不同
                bmp.SetSource(e.ChosenPhoto);
                //设置图片源
                img.Source = bmp;
                txtName.Text = e.OriginalFileName;
            }
        }
    }
}

其中CameraCaptureTask,有两个比较实用的方法,也就是我们这里用到的

   Show; 调用相机功能

  Completed ;相机拍摄完成之后可被调用

 

   知识点①:该事件中的e是指,通过该事件传递过来的参数,所以我们可以从中获取一些信息,属性OriginalSource表示产生该事件的元素(在windows phone 中都称之为元素而非控件);

   知识点②:这里调用了Completed方法,加上该方法之后,系统就不会处理相应的路由事件了,这里是指重写的OnManipulationStarted事件 ;

   知识点③: e.Handled = true; 该属性设置表示该路由事件已经处理完毕,不需要在向可视化树的上一层传递;

   知识点④:调用本方法的基类方法,虽然在这里重写了基类方法,但是不可避免的在基类完成的基础性操作,重写没有完成,这样操作会出现一些错误

   知识点⑤:利用SetSource设置的源一定是Stream流,wp支持png和jpeg格式

 这些都是在模拟器上的的操作,如果在真机上测试,请在测试前关闭ZUNE,也可移步 http://www.cnblogs.com/fwind/archive/2011/11/28/2265890.html

  总结: 使用相机是直接调用CameraCaptureTask类的show方法,这样相机就打开了,直到图片生成,再调用Completed方法,在 Completed方法中获得 PhotoResult中该图片的stream 并作为位图的源,并设置image的源;当前图片的文件名也就是PhotoResult的属性OriginalFileName,得到的文件名为该图片的 完整路径


本文转自shenzhoulong  51CTO博客,原文链接:http://blog.51cto.com/shenzhoulong/829569,如需转载请自行联系原作者

相关文章
|
Windows
windows103D对象,图片等隐藏
windows103D对象,图片等隐藏
95 0
|
3月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
278 1
|
编解码 iOS开发 Windows
B站电脑版,原来还隐藏着这个白嫖福利|Windows如何打开heic图片?
B站电脑版,原来还隐藏着这个白嫖福利|Windows如何打开heic图片?
|
6月前
|
机器人 Linux 数据安全/隐私保护
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
222 0
|
6月前
|
机器人 Linux 数据安全/隐私保护
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)(下)
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
120 0
|
6月前
|
Linux Python Windows
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)(上)
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
77 0
|
搜索推荐 安全 Windows
Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
1355 0
Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
|
JSON JavaScript Java
Windows server中java使用phantomjs+echarts-convert生成图表,图片中的中文乱码 解决办法
我这里是用java的 Runtime.getRuntime().exec 调用命令行执行phantomjs加echarts-convert生成柱状图的命令,本来在本地处理的挺成功的,放到服务器上后生成的图片中的中文都是乱码,百度到的基本上都是linux上乱码,让安装字体。
|
Windows
windows自带的比微信好用的截图工具:截取任意形状图片,标尺画直线,窗口图精准截取
windows自带的比微信好用的截图工具:截取任意形状图片,标尺画直线,窗口图精准截取
380 0
|
安全 应用服务中间件 nginx
Windows使用Nginx配置本地文件代理(查看本地资源或图片)
Windows使用Nginx配置本地文件代理(查看本地资源或图片)
866 0
Windows使用Nginx配置本地文件代理(查看本地资源或图片)