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 }

 

posted on 2016-12-20 16:48  jmlsaul  阅读(308)  评论(0)    收藏  举报