zoukankan      html  css  js  c++  java
  • WPF调用摄像头

    添加程序集:WPFMediaKit.dll

    更关键代码如下:

    界面设计代码如下: 

    <Window x:Class="摄像头调用.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="600" Width="800"
         xmlns:wpfmedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"
            WindowStartupLocation="CenterScreen" >
        <Grid>
            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal">
                    <ComboBox Name="cb" SelectionChanged="cb_SelectionChanged" Width="100" ></ComboBox>
                    <Button  Width="80"  Content="拍" Name="btnCapture" Click="btnCapture_Click" Margin="200,0,0,0"></Button>
                    <Button  Width="80"  Content="重拍" Name="btnReStart" Click="Restart_Click"></Button>
                </StackPanel>
                <wpfmedia:VideoCaptureElement Height="434" x:Name="vce" Stretch="Fill"  Margin="172,30,185,0" RenderTransformOrigin="0.5,0.5"  >
                    <wpfmedia:VideoCaptureElement.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform/>
                            <SkewTransform/>
                            <RotateTransform Angle="-90"/>
                            <TranslateTransform/>
                        </TransformGroup>
                    </wpfmedia:VideoCaptureElement.RenderTransform>
                </wpfmedia:VideoCaptureElement>
            </StackPanel>
        </Grid>
    </Window>

     处理事件代码

    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.IO;
    using WPFMediaKit.DirectShow.Controls;
    
    namespace 摄像头调用
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                cb.ItemsSource = MultimediaUtil.VideoInputNames;//获得所有摄像头
                if (MultimediaUtil.VideoInputNames.Length > 0)
                {
                    cb.SelectedIndex = 0;//第0个摄像头为默认摄像头
                }
                else
                {
                    MessageBox.Show("电脑没有安装任何可用摄像头");
                }
            }
    
            private void btnCapture_Click(object sender, RoutedEventArgs e)//拍照
            {
                RenderTargetBitmap bmp = new RenderTargetBitmap((int)vce.ActualWidth, (int)vce.ActualHeight,
                    //vce是前台wpfmedia控件的name
                    96, 96, PixelFormats.Default);
                //为避免抓不全的情况,需要在Render之前调用Measure、Arrange
                //为避免VideoCaptureElement显示不全,需要把
                //VideoCaptureElement的Stretch="Fill"
                vce.Measure(vce.RenderSize);
                vce.Arrange(new Rect(vce.RenderSize));
                bmp.Render(vce);
                BitmapEncoder encoder = new JpegBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(bmp));
                using (MemoryStream ms = new MemoryStream())
                {
                    encoder.Save(ms);
                    byte[] captureData = ms.ToArray();
                    File.WriteAllBytes(@"./photo/" + Guid.NewGuid().ToString().Substring(0, 5) + ".jpg", captureData);
                }
                vce.Pause();
            }
    
            //重拍
            private void Restart_Click(object sender, RoutedEventArgs e)
            {
                vce.Play();
            }
    
            private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)//ComboBox控件的选择事件
            {
                vce.VideoCaptureSource = (string)cb.SelectedItem;//vce是前台wpfmedia控件的name
            }
        }
    }
  • 相关阅读:
    【技术贴】每次打开excel表格都会弹出新excel。book1.xls解决方法
    【技术贴】鼠标右键盘符属性报错Volume filter WMI not found的解决办法
    解决QQ聊天QQ秀咒语为什么我不能施放咒语/看不到咒语效果?
    【java】servlet输出pdf文件到浏览器 教程
    C#抽象工厂模式的几种实现方法及比较(外摘)
    SQL 语句汇总With子句
    浅析.NET开发中代理模式的使用(外摘)
    使用设计模式构建通用数据库访问类(外摘)
    Cognos产品组件及各组件功能介绍
    游标Oracle游标汇总
  • 原文地址:https://www.cnblogs.com/MrZivChu/p/wpfmedia.html
Copyright © 2011-2022 走看看