最近写的一个WPF照相功能,往各位吐槽,提供优化

在WPF 设计器中添加如下代码

xmlns:wpfmedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"

添加显示摄像头图像控件

<wpfmedia:VideoCaptureElement DockPanel.Dock="Top" Name="captureElement" Margin="0,33,0,37"/>

在cs代码文档中添加如下代码

在引用程序集中添加WPFMediaKit程序集

引用类名空间,添加如下代码

using WPFMediaKit;
using WPFMediaKit.DirectShow.Controls;

加载摄像头

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
//加载摄像头
cmbCameras.ItemsSource = MultimediaUtil.VideoInputNames;
if (MultimediaUtil.VideoInputNames.Length > )
{
cmbCameras.SelectedIndex = ;
}
else
{
MessageBox.Show("没有可用摄像头!");
BtnCap.IsEnabled = false;
BtnOk.IsEnabled = false;
BtnNew.IsEnabled = false;
}
}

拍照

 private void BtnCap_Click(object sender, RoutedEventArgs e)
{
//captureElement. 怎么抓取高清的原始图像
RenderTargetBitmap bmp = new RenderTargetBitmap((int)captureElement.ActualWidth, (int)captureElement.ActualHeight,
, , PixelFormats.Default);
bmp.Render(captureElement);
BitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (MemoryStream ms = new MemoryStream())
{
encoder.Save(ms);
CaptureData = ms.ToArray();//将拍照的图像转化为二进制数组
}
}

确定拍照

 private void BtnOk_Click(object sender, RoutedEventArgs e)
{
if (CaptureData != null)
{
DialogResult = true;
}
else
{
MessageBox.Show("未拍照图像");
return;
}
}

重拍

private void BtnNew_Click(object sender, RoutedEventArgs e)
{
captureElement.Play();
}

摄像头切换

private void cmbCameras_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
captureElement.VideoCaptureSource = (string)cmbCameras.SelectedItem;
}

将二进制转化成png

private BitmapImage ShowImage(byte[] imgbytes)
{
MemoryStream stream = new MemoryStream(imgbytes);
BitmapImage bmpImg = new BitmapImage();
bmpImg.BeginInit();
bmpImg.StreamSource = stream;
bmpImg.EndInit();
return bmpImg;
}

图片

最新文章

  1. 转 LoadRunner 技巧之协议分析
  2. 如何删除TFS的Team Project
  3. CSS display:inline和float:left两者区别探讨
  4. maven中使用net.sf.json-lib
  5. Long Long Message
  6. [topcoder]UnsealTheSafe
  7. 目测ZIP的压缩率
  8. 探索PHP+Nginx(二) 安装PHP
  9. 替换Gravatar头像默认服务器
  10. Web移动端的常用组件库
  11. struts2标签库----数据标签详解
  12. UI Automator 常用 API 整理
  13. 消息中间件和JMS介绍
  14. Python自定义排序
  15. 《温故而知新》JAVA基础五
  16. CentOS6.5 安装Storm集群
  17. 20155225 实验二《Java面向对象程序设计》实验报告
  18. 从零开始学Linux(11)--more
  19. Geforce experience报错:something went wrong try restarting geforce
  20. Math.ceil()、floor()、round()

热门文章

  1. 【Quote】What is Mono
  2. Ubuntu 16.04 - python3 安装mysql驱动
  3. 模仿Word中组织结构图的特点生成流程图
  4. HTML之背景颜色的改变
  5. WPF非UI线程获取修改控件属性值的方法
  6. CSS里的引用@import、link
  7. Mapper映射器
  8. java集合(交集,并集,差集)
  9. C++11智能指针
  10. js 字符串“123”,变成整数123,不用parseInt 函数