原文:用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件


  一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种CodeProject啊,终于让我找到海外兄弟写的源码了,原理是通过不断向摄像头读取图片不断刷新到窗体控件上。有Demo就直接封个控件呗,具体怎么实现的也忙不得管它了....

功能还是十分不错呢。特别是它拍照后添加到列表里的动画效果十分不错哦~~

核心就是这几个类了,由于原作者估计很喜欢MVVM所以通过各种Command来控制的,不能直接导航看着有点头昏。我就自己的风格封了个简单易懂的控件。

新建一个工程,把这个文件夹添加进工程后,新建用户控件

前台代码:

xmlns:camPlayer="clr-namespace:CatenaLogic.Windows.Presentation.WebcamPlayer"

<camPlayer:CapPlayer x:Name="camPlayer" RenderTransformOrigin="0.5,0.5" >
<camPlayer:CapPlayer.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="-1" ScaleX="1"/>
<SkewTransform AngleY="0" AngleX="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform/>
</TransformGroup>
</camPlayer:CapPlayer.RenderTransform>
</camPlayer:CapPlayer>

其实就一句话,主要是不知道为什么出现的效果是上下颠倒的,所以我给上下翻转下....

后台代码:

public ImageSource imgSource
{
get { return (ImageSource)GetValue(imgSourceProperty); }
set { SetValue(imgSourceProperty, value); }
}

public static readonly DependencyProperty imgSourceProperty =
DependencyProperty.Register("imgSource", typeof(ImageSource), typeof(CopCamPlayer), null);



private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
camPlayer.Device = new CapDevice();
camPlayer.Device.MonikerString = CapDevice.DeviceMonikers[].MonikerString;//设置通过哪个设备
}

//拍照片
public void CaptureImage()
{
imgSource = camPlayer.CurrentBitmap;
}

//停止摄像头占用
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
camPlayer.Device.Stop();
GC.Collect(); //回收垃圾,不然停止不了占用
}

注意:一定要调用GC.Collect();强制回收一下垃圾,不然摄像头依然被占用(从c#发家的我,被这个坑惨了T_T)

其中拍的照片imgSource定义成依赖项属性方便Image控件直接绑定数据源。CaptureImage()方法的调用可以通过添加行为实现:

<Grid x:Name="圆形按钮" Height="56" Margin="0,0,335.333,119" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="59.333">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<ei:CallMethodAction TargetObject="{Binding ElementName=copCamPlayer}" MethodName="CaptureImage"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
<Image HorizontalAlignment="Right" Margin="0,250,67.5,163" Width="242" Source="{Binding imgSource, ElementName=copCamPlayer}"/>

  其中CopCamPlayer就是上面代码封好的控件,而CallMethodAction可以调用的方法需要满足无参数,无返回值就行。image控件绑定到拍照的结果属性上,这样点击圆形按钮就可以拍照拉~~

哈哈还是简单呢,主要外国友人封的好啊,附上外国友人源代码:

http://files.cnblogs.com/tong-tong/WebcamPlayer_1.1.zip

这个类的功能不仅于此,本人现在比较忙没仔细研究,各位有发现什么新功能告知我,thx。

用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件的更多相关文章

  1. 用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机

    原文:用MVVM模式开发中遇到的零散问题总结(5)--将动态加载的可视元素保存为图片的控件,Binding刷新的时机 在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打 ...

  2. 用MVVM模式开发中遇到的零散问题总结(2)

    原文:用MVVM模式开发中遇到的零散问题总结(2) 本节目录: 1.解决动画属性被劫持问题 2.设置页面焦点默认所在对象 3.XAML模拟键盘按键 4.DataGrid数据源绑定到复杂格式(dynam ...

  3. 用MVVM模式开发中遇到的零散问题总结(3)——自制正则表达式万能绑定转换器

    原文:用MVVM模式开发中遇到的零散问题总结(3)--自制正则表达式万能绑定转换器 前言 最近接受了3个项目的洗礼,出差近3个月,各种北京.广州.昆明来回奔波,好久没写博客了,之前我觉得我遇到的问题都 ...

  4. 用MVVM模式开发中遇到的零散问题总结(1)

    https://www.cnblogs.com/tong-tong/archive/2011/11/28/2250948.html

  5. ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证

    ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...

  6. 【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法

    实际使用MVVM进行WPF开发的时候,可能会用到列表控件中每行一个编辑或删除按钮,这时直接去绑定,发现无法响应: <DataGridTemplateColumn Header="操作& ...

  7. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  8. 学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder

    1 创建并运行第一个App 1.1 问题 使用Xcode创建一个App项目,该应用实现功能在界面上显示Hello World标签,在模拟器中的运行结果如图-1所示: 图-1 1.2 方案 分析图-1, ...

  9. Android 基于MVC的MVVM模式开发

    由skay整理  http://blog.csdn.net/sk719887916/article/details/50386144 什么是MVVM 我们一步步来,从MVC开始. MVC 我们都知道, ...

随机推荐

  1. ssion机制详解

    ssion机制详解   ref:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚sess ...

  2. node+mongodb+WP构建的移动社交应用源码 分享

    源码地址: https://github.com/kangkaisen/dreaming dreaming 详情介绍:http://www.bcmeng.com/dreaming/

  3. [Node.js] Take Screenshots of Multiple Dimensions for Responsive Sites using Nightmare

    When developing responsive websites, you will constantly be resizing your browser to make sure your ...

  4. android Navigator的高度计算和推断是否显示

    进入互联网行业几天了, 从手机行业转到互联网行业也在慢慢的适应: IDE工具的使用(之前一直在Ubuntu 命令行进行开发). 版本号管理工具,代码架构等等这些都须要又一次适应. 好在本人另一些底子, ...

  5. css3-5 css3鼠标、列表和尺寸样式怎么用(文字有关的样式会被继承)

    css3-5  css3鼠标.列表和尺寸样式怎么用(文字有关的样式会被继承) 一.总结 一句话总结:css标签中文字有关的样式会被继承.由常用样式记起. 1.鼠标常用样式有哪些? cursor:poi ...

  6. ios app初始化和数据迁移的设计思路

    整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件 ...

  7. qt-4.8.4安装和环境变量配置

    在Linux中分别安装应用于不同平台的Qt:PC.嵌入式X86:ARM. 这三者PC版.嵌入式X86版和ARM版的差别主要体如今:当configure时分别加了不同的參数,详细差别是: PC平台(X1 ...

  8. 手动安装huson插件的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先到jenkins-ci.org下载插件,地址为:http://updates.jenkins-ci.org/dow ...

  9. 【9206】 奖学金(NOIP2007)

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成 ...

  10. Tomcat下部署SpringBoot

    SpringBoot默认支持Tomcat7及以上版本(SpringBoot默认支持servlet3.1版本及以上,Tomcat6只支持到servlet2.5) 测试环境:jdk1.8 + tomcat ...