wpf 拍照 保存图片
.xaml 添加
xmlns:WPFMediaKit="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"
如下图显示:
<Window x:Class="STS_ContorlClient.Board_Photograph"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:STS_ContorlClient"
mc:Ignorable="d"
xmlns:WPFMediaKit="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"
Title="Board_Photograph" Height="1080" Width="1920" Loaded="Window_Loaded">
<Grid >
<Viewbox Stretch="Fill" >
<Canvas Height="1080" Width="1920" >
<Button x:Name="button1" Content="拍照" Height="248" Canvas.Left="1641" Width="269" Canvas.Top="395" />
<Button x:Name="button" Content="拍照" Height="248" Canvas.Left="1641" Width="269" Canvas.Top="822" />
<Button x:Name="photograph" Content="拍照" Height="248" Click="Photograph_Click" Canvas.Left="1641" Width="269" Canvas.Top="395" />
<WPFMediaKit:VideoCaptureElement x:Name="m_VideoCaptureElement" RenderTransformOrigin="0.5,0.5" Height="1081" Canvas.Left="-3" Canvas.Top="7" Width="1635">
<WPFMediaKit:VideoCaptureElement.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform AngleY="0.421"/>
<RotateTransform Angle="-0.251"/>
<TranslateTransform Y="-5.993"/>
</TransformGroup>
</WPFMediaKit:VideoCaptureElement.RenderTransform>
</WPFMediaKit:VideoCaptureElement>
</Canvas>
</Viewbox>
</Grid>
</Window>
效果如下:
.cs 代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using WPFMediaKit.DirectShow.Controls;
namespace STS_ContorlClient
{
/// <summary>
/// Board_Photograph.xaml 的交互逻辑
/// </summary>
public partial class Board_Photograph : Window
{
public Board_Photograph()
{
InitializeComponent();
string[] inputNames = MultimediaUtil.VideoInputNames;
m_VideoCaptureElement.VideoCaptureSource = inputNames[0];
}
//拍照
public void Photograph_Click(object sender, RoutedEventArgs e)
{
this.Hide();
if (Photograph_instance != null)
Photograph_instance.Hide();
// MainWindow_instance = null;
Window_WhiteBoard.Instance().Show();
//调用默认摄像头
RenderTargetBitmap bmp = new RenderTargetBitmap((int)m_VideoCaptureElement.ActualWidth, (int)m_VideoCaptureElement.ActualHeight, 96, 96, PixelFormats.Default);
bmp.Render(m_VideoCaptureElement);
BitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
//命名格式
string now = DateTime.Now.Month + "" + DateTime.Now.Day + "" + DateTime.Now.Hour + "" + DateTime.Now.Minute + "" + DateTime.Now.Second;
//保存路径D盘根目录
string filename = "D:\\" + now + ".jpg";
FileStream fstream = new FileStream(filename, FileMode.Create);
encoder.Save(fstream);
fstream.Close();
board.imag_t.Source = new ImageSourceConverter().ConvertFromString("D:\\" + now + ".jpg") as ImageSource;
sendMsg[2] = 0x06;
sendMsg[3] = 0x07;
sendMsg[4] = 0x01;
client_send.SendPackage(sendMsg, sendMsg[2]);
}