WPFMediaKit照相功能
最近写的一个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 > 0) { cmbCameras.SelectedIndex = 0; } 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, 96, 96, 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; }
图片
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库