原文: 用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[0].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. 《iOS 9 开发指南》——第6章,第6.7节iOS 9控件的属性

    本节书摘来自异步社区<iOS 9 开发指南>一书中的第6章,第6.7节 iOS 9控件的属性,作者 管蕾,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.7 i ...

  2. WebBuilder中知识点:批量操作、combo、radio、复选框控件的使用

    一.WebBuilder中对grad列表设置复选框按钮 如图:,实现方法:在grad属性里面设置selType属性为checkboxmodel,multiSelect也最好设置为true.设置完之后, ...

  3. 聊聊iOS开发中耳机的那点事(监听耳机拔插、耳机线控)-b

    如果说一个项目出现的最重大的事故,那无疑就是开发人员使用了不可控的元素. 前言 iOS开发当中有关于视音频播放的开发不在少数,用户时常会使用到一种输出设备,那就是"耳机",这一篇博 ...

  4. Android:Socket客户端开发,Android 的Socket客户端优化,Android非UI线程修改控件程序崩溃的问题

    一.Android:Socket客户端开发 创建一个工程 我们要做的是按下按键之后,去往服务器 (服务器) 或者我们自己写的服务器 ,给他发送一些预定好的东西 然后打开操作界面 然后修改一下 你要发送 ...

  5. Iphone开发(七)date picker 和 picker view,较复杂的控件

    holydancer原创,如需转载,请在显要位置注明: 转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details ...

  6. tinymce 工具栏 不显示_winform中MenuStrip主菜单、工具栏、状态栏、托盘、其他控件...

    MenuStrip主菜单 如果要写某个菜单的事件就双击那个菜单即可.设置热键 符号要加上&这个符号,快捷键shortcutkeys选择快捷键,快速选择菜单可以插入标准项,主菜单和工具栏都有这个 ...

  7. java datatable用法_Java中实现DataTable工具类,并利用其实现简单分页控件。

    具体工具类代码,请见我上一个博客. 一.工具类的使用 1.1 DataTable工具类的使用 1.1.1DataTable简单解析 顾名思义,DataTable其实就是一张虚拟数据表,用于存储由数据库 ...

  8. VS2013 MFC 直接将 OpenCV2.0/3.0 库中的 Mat 结构的图像传递到 Picture Control(图片控件)

    接上文 VS2013 MFC + OpenCV3.0 打开图片: 既然我们已经从 OpenCV1.0 走到了 OpenCV2.0 乃至更高,又何苦在写基于 MFC 的图像处理程序时,又回到 OpenC ...

  9. 聊聊iOS开发中耳机的那点事(监听耳机拔插、耳机线控)

    如果说一个项目出现的最重大的事故,那无疑就是开发人员使用了不可控的元素. 前言 iOS开发当中有关于视音频播放的开发不在少数,用户时常会使用到一种输出设备,那就是"耳机",这一篇博 ...

最新文章

  1. zigbee的路由器能分配网络地址吗_网络基础知识学习 小白也能变专家
  2. shell之$@和$*的区别
  3. java string转number_Java运算符知识点总结
  4. php去除数组中的第一个元素,php如何删除数组的第一个元素和最后一个元素
  5. Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用
  6. C语言内存/指针相关
  7. 【db】mongodb的故事
  8. java springmvc https_【Java Web开发学习】Spring MVC 使用HTTP信息转换器
  9. mybatis入门教程(F)
  10. Cocos2dx 下面,对 音乐 和音效简单封装
  11. xcode 重新来过openssl项目历程
  12. Atitit 2018 技术趋势与没落技术总结 目录 1. 2018 技术雷达 1 1.1. HOSTED IDENTITY MANAGEMENT AS A SERVICE (SaaS)身份管理
  13. oneno浏览器插件_Send to OneNote 1.2.13
  14. RTKLIB专题学习(八)—卫星星历和钟差
  15. 琳琳冒险岛家族任务指南
  16. 2022京东3.8节如何给不同SKU打水印?
  17. 使用matlab画信号的频域图
  18. 前端canvas画海报
  19. 如何重新启动Windows的Explorer.exe(以及任务栏和“开始”菜单)
  20. hdu6060 RXD and dividing

热门文章

  1. maven制作脚手架
  2. 2022.08.22 索尼外包面试
  3. 机器人编程语言python-机器人编程常用的四大语言
  4. java 缓冲区溢出_缓冲区溢出详解
  5. html页面下的阴影,html5/css3文本阴影(text-shadow)详解及示例
  6. 黑马程序员SSM_Spring笔记(自用)
  7. 服务主机本地系统占cpu_如何通过“服务主机:本地系统(网络受限制)”解决CPU使用率过高的问题
  8. 关于nginx集合fastdfs时http请求无法访问,nginx的权限问题。
  9. 在ie中实现placeholder属性(其实主要针对ie8,9)
  10. CocosCreator 源码-CCAssetManager.js详解