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>
代码隐藏文件
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 派生自chooserbaseaspx">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,得到的文件名为该图片的完整路径
作者:神舟龙
上一篇: 红糖糍粑可以用年糕代替吗
下一篇: 上海小吃都有什么