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>
 

效果如下:

wpf 拍照 保存图片

 

.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]);
        }