当前位置: 移动技术网 > IT编程>移动开发>WP > windows phone使用相机并获取图片

windows phone使用相机并获取图片

2018年10月03日  | 移动技术网IT编程  | 我要评论

三国志双人版,道心修魔传,家庭装修的步骤

使用相机需要引用如下命名空间
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 派生自chooserbasex">http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.cameracapturetask%28v=vs.92%29.aspx
其中cameracapturetask,有两个比较实用的方法,也就是我们这里用到的
   show; 调用相机功能
  completed ;相机拍摄完成之后可被调用
 
   知识点①:该事件中的e是指,通过该事件传递过来的参数,所以我们可以从中获取一些信息,属性originalsource表示产生该事件的元素(在windows phone 中都称之为元素而非控件);
   知识点②:这里调用了completed方法,加上该方法之后,就不会处理相应的路由事件了,这里是指重写的onmanipulationstarted事件 ;
   知识点③: e.handled = true; 该属性设置表示该路由事件已经处理完毕,不需要在向可视化树的上一层传递;
   知识点④:调用本方法的基类方法,虽然在这里重写了基类方法,但是不可避免的在基类完成的基础性操作,重写没有完成,这样操作会出现一些错误
   知识点⑤:利用setsource设置的源一定是stream流,wp支持png和jpeg格式
 这些都是在模拟器上的的操作,如果在真机上测试,请在测试前关闭zune,也可移步
  总结:使用相机是直接调用cameracapturetask类的show方法,这样相机就打开了,直到图片生成,再调用completed方法,在completed方法中获得 photoresult中该图片的stream 并作为位图的源,并设置image的源;当前图片的文件名也就是photoresult的属性originalfilename,得到的文件名为该图片的完整路径

 \


作者:神舟龙
 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网