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;
        }
复制代码

 

图片

 

 

posted @   汉城节度使  阅读(1610)  评论(3编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示