WPF 相机
WPF 相机
用WPFMediaKit.dll

1 <Window x:Class="HRMSys.UI.CaptureWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:HRMSys.UI" 7 mc:Ignorable="d" 8 xmlns:wpfmedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" 9 Title="CaptureWindow" Height="300" Width="300" Loaded="Window_Loaded"> 10 <Grid> 11 <DockPanel> 12 <ComboBox DockPanel.Dock="Top" Height="30" Name="cbCameras" SelectionChanged="cbCameras_SelectionChanged"></ComboBox> 13 <wpfmedia:VideoCaptureElement Height="200" DockPanel.Dock="Top" Name="captureElement"></wpfmedia:VideoCaptureElement> 14 <StackPanel Orientation="Horizontal"> 15 <Button Height="30" Width="50" DockPanel.Dock="Top" Name="btnCapture" Content="拍照" Click="btnCapture_Click"></Button> 16 <Button Height="30" Width="50" x:Name="btnOK" Content="确定" Click="btnOK_Click" /> 17 <Button Height="30" Width="50" x:Name="btnCancel" Content="取消" Click="btnCancel_Click" /> 18 </StackPanel> 19 </DockPanel> 20 </Grid> 21 </Window>
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Windows; 8 using System.Windows.Controls; 9 using System.Windows.Data; 10 using System.Windows.Documents; 11 using System.Windows.Input; 12 using System.Windows.Media; 13 using System.Windows.Media.Imaging; 14 using System.Windows.Shapes; 15 using WPFMediaKit.DirectShow.Controls; 16 namespace HRMSys.UI 17 { 18 /// <summary> 19 /// CaptureWindow.xaml 的交互逻辑 20 /// </summary> 21 public partial class CaptureWindow : Window 22 { 23 public CaptureWindow() 24 { 25 InitializeComponent(); 26 } 27 public byte[] CaptureData { get; set; } 28 private void Window_Loaded(object sender, RoutedEventArgs e) 29 { 30 btnOK.IsEnabled = false; 31 cbCameras.ItemsSource = MultimediaUtil.VideoInputNames; 32 if (MultimediaUtil.VideoInputNames.Length > 0) 33 { 34 cbCameras.SelectedIndex = 0;//第0个摄像头为默认摄像头 35 } 36 else 37 { 38 MessageBox.Show("电脑没有安装任何可用摄像头"); 39 } 40 } 41 private void cbCameras_SelectionChanged(object sender, SelectionChangedEventArgs e) 42 { 43 captureElement.VideoCaptureSource = (string)cbCameras.SelectedItem; 44 } 45 private void btnCapture_Click(object sender, RoutedEventArgs e) 46 { 47 if (captureElement.IsPlaying != true) 48 { 49 captureElement.Play(); 50 btnCapture.Content = "拍照"; 51 btnOK.IsEnabled = false; 52 } 53 else 54 { 55 Capture(); 56 btnCapture.Content = "重拍"; 57 btnOK.IsEnabled = true; 58 } 59 } 60 private void Capture() 61 { 62 //captureElement. 怎么抓取高清的原始图像 63 //能不能抓视频。 64 //todo:怎么只抓取一部分 65 RenderTargetBitmap bmp = new RenderTargetBitmap( 66 (int)captureElement.ActualWidth, (int)captureElement.ActualHeight, 67 96, 96, PixelFormats.Default); 68 bmp.Render(captureElement); 69 BitmapEncoder encoder = new JpegBitmapEncoder(); 70 encoder.Frames.Add(BitmapFrame.Create(bmp)); 71 using (MemoryStream ms = new MemoryStream()) 72 { 73 encoder.Save(ms); 74 CaptureData = ms.ToArray(); 75 } 76 captureElement.Pause(); 77 } 78 private void btnOK_Click(object sender, RoutedEventArgs e) 79 { 80 DialogResult = true; 81 } 82 private void btnCancel_Click(object sender, RoutedEventArgs e) 83 { 84 DialogResult = false; 85 } 86 } 87 }
如何将Byte[]数据源显示成图片
1 private void ShowImg(byte[] imgBytes) 2 { 3 MemoryStream stream = new MemoryStream(imgBytes); 4 BitmapImage bmpImg = new BitmapImage(); 5 bmpImg.BeginInit(); 6 bmpImg.StreamSource = stream; 7 bmpImg.EndInit(); 8 image.Source = bmpImg; 9 }
浙公网安备 33010602011771号