windows phone 使用相机并获取图片(3)

原文:windows phone 使用相机并获取图片(3)
使用相机需要引用如下命名空间

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>

 代码隐藏文件

 

View Code

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 派生自ChooserBase

其中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,得到的文件名为该图片的完整路径

 

 

 

 

时间: 2024-10-02 14:55:39

windows phone 使用相机并获取图片(3)的相关文章

位图解析系统相机返回的图片异常

问题描述 位图解析系统相机返回的图片异常 为了使图片不失贞,将系统相机照的图片先保存在通过BitmapFactory.decodeFile(imgPath)获取该图片的位图,偶尔会出现Unable to decode stream,说的无法解析该图片流,但是我到文件夹下,图片是存在的,我将图片的路径输出也是正确的.这种情况偶尔会发生,真心不知道怎么办了.求大神帮忙...急需.谢谢.下面是调用系统相机的代码,当照片拍完事就已经保存完成了. /** * @category 调用相机获取图片 */ p

Swift学习笔记(4)使用UIImagePickerController实现从设备图片库和照相机获取图片

Swift学习笔记(4)使用UIImagePickerController实现从设备图片库和照相机获取图片 设备图片库和照相机是图像的两个重要来源,使用UIKit中提供的图像选择器UIImagePickerController可以轻易地实现从设备图片库和照相机获取图片. 目录 Swift学习笔记4使用UIImagePickerController实现从设备图片库和照相机获取图片 目录 声明协议 创建UIImagePickerController UIImagePickerControllerDe

快速构建Windows 8风格应用29-捕获图片与视频

原文:快速构建Windows 8风格应用29-捕获图片与视频 引言 本篇博文主要介绍Windows 8中相机的概念.捕获图片与视频的基本原理.如何实现捕获图片与视频.相机最佳实践. 一.相机 关于相机 1.相机对话框提供了触屏优化的全屏体验,你可从嵌入的或附加的相机中捕获照片和视频. 2.全屏对话框处理显示相机 UI 的工作. 3.通过此对话框,你可以使用对 Windows.Media.Capture.CameraCaptureUI.captureFileAsyncAPI 的一种方法调用捕获照片

android调用系统相机拍照返回图片模糊

问题描述 android调用系统相机拍照返回图片模糊 上传代码 调用系统相机 Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(it, 1); 然后获取图片 Bundle extras = data.getExtras(); b = (Bitmap) extras.get("data"); String name = new SimpleDateFormat("yyy

Android 调用系统相机拍摄获取照片的两种方法实现实例_Android

Android 调用系统相机拍摄获取照片的两种方法实现实例 在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片.下面是我总结的两种方法获取拍摄之后的照片,一种是通过Bundle来获取压缩过的照片,一种是通过SD卡获取的原图. 下面是演示代码: 布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:

在Windows phone中使用Windows Azure Storage Blob来存放图片

前面一片文章介绍了如何在Windows Store应用中如何使用Azure Blob存储.实际上,该文章的大部分内容对Windows Phone应用也适用.但是由于部分API在两个平台有不同,步骤和示例代码在Windows Phone上需要做一定的修改.为了便于大家学习,在这篇文章中,我就专门来介绍如何在Windows Phone应用中使用Windows Azure Storage Blob来存放图片,文档等二进制大型对象: 一.安装Azure Storage客户端库 理论上,您可以直接使用RE

在Windows store中使用Windows Azure Storage Blob来存放图片

随着Windows Azure在中国的落地,原来许多需要自己维护服务器才能完成的工作我们都可以交给Windows Azure来完成,而且更经济更方便.在下面这篇文章中,我们就一步一步的来介绍如何在Windows store应用中使用Windows Azure Storage Blob来存放图片,文档等二进制大型对象: 一.安装Azure Storage客户端库 理论上,您可以直接使用REST API来访问Azure Storage.但是在实践中这样实现需要完成大量代码.为了能够在windows

Android开发中用相机拍照后图片裁剪的实例及源码

其实Android提供Intent让我们打开系统的相机,但是系统相机跟自己app风格不搭,而且用起来体验不好.所以我使用了SDK提供的camera API自定义了一个相机,并且在相机界面上面添加了参考线,有助于用户将题目拍正,提高ocr的识别率. 1.绘制参考线的代码 public class ReferenceLine extends View {     private Paint mLinePaint;     public ReferenceLine(Context context) {

Android获取本地相册图片和拍照获取图片的实现方法

需求:从本地相册找图片,或通过调用系统相机拍照得到图片. 容易出错的地方: 1.当我们指定了照片的uri路径,我们就不能通过data.getData();来获取uri,而应该直接拿到uri(用全局变量或者其他方式)然后设置给imageView imageView.setImageURI(uri); 2.我发现手机前置摄像头拍出来的照片只有几百KB,直接用imageView.setImageURI(uri);没有很大问题,但是后置摄像头拍出来的照片比较大,这个时候使用imageView.setIm