最近写的一个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;
}

图片

WPFMediaKit照相功能的更多相关文章

  1. Android简单调用相机Camera功能,实现打开照相功能

    在最開始接触Android相机功能之前,先来体验一下Android调用系统照相功能吧 核心代码 Intent intent = new Intent(); //调用照相机 intent.setActi ...

  2. Android 照相功能

    使用内置的Camera 应用程序捕获图像            探索Android 所提供的内置功能,内置的图像捕获与存储功能为Android 上全部媒体功能提供了一个非常好的切入点,为我们在以后的章 ...

  3. CameraAPI中的 自定义照相功能

    前几天的项目需要使用CameraAPI自己定义照相机,之前用过的二维码也要自己写底层代码,于是总结一下使用CameraAPI的几点事项.现在由于JDK7.0及其以上版本的官方文档已经不再推荐使用cam ...

  4. android 实现照相功能 照片存放在SID卡中,将照片显示在Image中

    protected static final int CAMERA_RESULT = 0; private String fileName; private Button takePhotoBn; p ...

  5. Android 学习笔记之如何实现简单相机功能

    PS:看来算法和数据结构还是非常有用的,以后每天都练习两道算法题目...这次忘了对代码进行折叠了..导致篇幅过长... 学习内容: 1.Android如何实现相机功能... 2.如何实现音频的录制.. ...

  6. 照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController

    一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例 ...

  7. IOS 图片上传处理 图片压缩 图片处理

    - (void)initActionSheet { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil dele ...

  8. 关于近期项目代码整理(iOS)

    近期对项目中所经常使用到的封装代码进行整理,并将其上传至网络保存,本人会在后期不间断的更新其内容.具体链接地址为代码封装 关于代码 这些代码为从学习iOS来到现在实际项目开发中,精炼出来的封装代码,使 ...

  9. 大话设计模式C++版——原则和引言

    转贴请注明转自:http://blog.csdn.net/gufeng99/article/details/45832711 读程杰的<大话设计模式>有一段时间了,将其C#版的设计模式代码 ...

随机推荐

  1. ASP.NET MVC 4 SimpleMembership Provider (1)

    新的ASP.NET MVC 4.0 提供了一个新的Membership Provider,叫SimpleMembership. 首先,我们建立一个新的solution 首先我们先看一下web.conf ...

  2. C# Tips: Draw a data table in console

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. Android ListView动态改变Item高度

    在adapter的getView方法中进行设置,代码如下 @Override public View getView(int position, View convertView, ViewGroup ...

  4. spark写入Oracle 报错 java.lang.ArrayIndexOutOfBoundsException: -32423

    原因: oracle 10g的驱动执行的批量提交只支持32768个参数,如果表的字段多于32个,就会出现该异常 解决办法: 升级oracle的驱动版本,换成ojdbc6.jar

  5. Cocos2d-js中Chipmunk引擎

    我们先介绍轻量级的物理引擎——Chipmunk.Chipmunk物理引擎,由Howling Moon Software的Scott Lebcke开发,用纯C编写.Chipmunk的下载地址是http: ...

  6. UIView总结---对UIView头文件中的大部分信息进行中文注释

    @interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> ...

  7. VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer

    中断服务程序 ISR 硬件中断处理是实时系统的关键,因为它是外部时间通知系统的方式. ISR亦称为中断处理函数,是对中断的正确响应.可以使用任何ISR连接到任何没有被VxWorks使用的中断上.当关联 ...

  8. Python中lambda表达式学习

    lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...

  9. php面向对象的特性:OOP的封装

    字段的作用域: 1.public 公共的(类外可以访问) 2.private 私有的(只能类内访问) 3.protected 受保护的(类内和子类可以访问,类外无法访问) /*通过公共的方法来访问私有 ...

  10. Coarse-Grained lock 粗粒度锁

    用一个锁Lock一组相关的对象 有时,需要按组来修改多个对象. 这样,在需要锁住其中一个的时候,必须连带地将其他的对象都上锁. 为每一个对象都加上一个锁是很繁琐的. 粗粒度锁是覆盖多个对象的单个锁. ...