摄像头操作

1.xaml

<Window x:Class="DemoWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Loaded="Window_Load"      //添加引用
        xmlns:wpfmedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"
        >
    <Grid>
        <Canvas>         //拍照按钮
            <Button Name="save_db"
                    Click="save_file" Canvas.Left="-2" Canvas.Top="262" Height="49" Width="161">拍照</Button>
              //取消预览按钮       <Button Name="cancel_Previews"
                    Click="cancel_Previews_Click" Canvas.Left="157" Canvas.Top="262" Height="49" Width="161">取消预览</Button>
              //展示预览按钮       <Button Name="show_Previews"
                    Click="show_Previews_Click" Canvas.Left="157" Canvas.Top="262" Height="49" Width="161">展示预览</Button>        //选择设备框
            <ComboBox Name="cb" Height="21" Canvas.Left="15" Canvas.Top="6" Width="407" SelectionChanged="cb_SelectionChanged"></ComboBox>
              //视频显示框       <wpfmedia:VideoCaptureElement
                Name="vce"
                Height="200" Width="197" Canvas.Left="34" Canvas.Top="60" />             //图片预览框       <Image Name="image" Height="200" Width="197" Canvas.Left="262" Canvas.Top="60"></Image>

        </Canvas>
    </Grid>
</Window>

效果图

2.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
using System.IO;
using WPFMediaKit.DirectShow.Controls;

namespace DemoWPF
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public bool isShow = true;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Load(object sender, RoutedEventArgs e)
        {
            //初始化界面
            //第一次的页面   点击拍照以后,会在右面生成一个预览,所以展示预览这个框应该消失,展现的是取消预览
            show_Previews.Visibility = Visibility.Collapsed;

            //复选数据源指定为MultimediaUtil类的VideoInputNames属性,这是一个获取本主机可控摄像头设备名称的集合。
            cb.ItemsSource = MultimediaUtil.VideoInputNames;

            // 如果存在摄像设备,则将第一设备设为默认选择项目。
            if (MultimediaUtil.VideoInputNames.Length > 0)
            {
                cb.SelectedIndex = 0;
            }
            else
            //摄像设备不存在
            {
                MessageBox.Show("没有摄像头!请确保您的电脑上有摄像头安装正常");
            }
        }
        public RoutedEventHandler MainWindow_Loaded { get; set; }
        //执行拍照操作---->
        private void save_file(object sender, RoutedEventArgs e)
        {
            // 建立目标渲染图像器,高度为前台控件实显高度,此处不能使用.width或.height属性,否则出现错误
            RenderTargetBitmap bmp = new RenderTargetBitmap((int)vce.ActualWidth, (int)vce.ActualHeight, 96, 96, PixelFormats.Default);
            //为了避免图像抓取出现黑边现象,需要对图象进行重新测量及缩放,执行以下操作
            vce.Measure(vce.RenderSize);
            // 指定图像渲染目标
            vce.Arrange(new Rect(vce.RenderSize));
            // 建立图像解码器。类型为jpeg
            bmp.Render(vce);
            // 将当前渲染器中渲染位图作为一个位图帧加入解码器,进行解码,取得数据流。
            BitmapEncoder encode = new JpegBitmapEncoder();
            // 建立内存流,将得到解码图像流写入内存流。
            encode.Frames.Add(BitmapFrame.Create(bmp));
            //保存文件的路径
            string path = "D://HelloWorld";
            //判断路径是否存在
            if (!File.Exists(path))
            {
                //如果不存在,创建一个路径
                System.IO.Directory.CreateDirectory(path);
            }
            //保存的文件名
            string fileName = path + "//" + ProduceRandom() + ".jpg";
            //保存文件
            FileStream fream = new FileStream(fileName, FileMode.Create);
            encode.Save(fream);
            fream.Close();
            //将保存的文件URl拿出来
            var url = new Uri(fileName, UriKind.Absolute);
            //将拿出来的文件设置的image控件中
            image.Source = new BitmapImage(url);
        }
        private void show_Previews_Click(object sender, RoutedEventArgs e)
        {
            isShow = true;
            this.TradePage_Loaded();
        }
        private void cancel_Previews_Click(object sender, RoutedEventArgs e)
        {
            isShow = false;
            this.TradePage_Loaded();
        }
        private void TradePage_Loaded()
        {
            if (isShow)
            {
                show_Previews.Visibility = Visibility.Collapsed;
                image.Visibility = Visibility.Visible;
            }
            else
            {
                show_Previews.Visibility = Visibility.Visible;
                image.Visibility = Visibility.Collapsed;
            }
        }    //产生随机数
        private string ProduceRandom()
        {
            Random ran = new Random();
            string result = null;
            for (int i = 0; i < 3; i++)
            {
                int random = ran.Next(1, 9);
                result += random;
            }
            return result;
        }
        //comboBox执行操作时,触发SelectionChanged事件,将视频显示设备的源提定为 combox指定的设备。即确定显示设备
        //到这步,则可以实现图像的产时预览了。
        private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            vce.VideoCaptureSource = (string)cb.SelectedItem;
        }
    }
}

3.需要引入的dll

时间: 2024-10-14 13:50:55

摄像头操作的相关文章

摄像头操作:WPFMediaKit(from www.sysoft.net.cn)

1.主程序中头部加入: xmlns:WPFMediaKit="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"> 2.主窗口中加入一个提供选择摄 像头的combox <comboBox name="caps" ></comboBox> 3.加入wpfmediakit控件 <WPFMediaKit:VideoCaptureElement x:Nam

delphi xe10 麦克风、摄像头操作

TakePhotoFromCameraAction1: TTakePhotoFromCameraAction; // 通过手机摄像头获取图片TakePhotoFromLibraryAction1: TTakePhotoFromLibraryAction; //获取手机已存在图片ShowShareSheetAction1: TShowShareSheetAction;//用其它程序分享图片(Bitmap.Assign();) 获取麦克风设置 FMX.MediaFMicrophone: TAudio

opencvbase 实现opencv打开摄像头和初步处理等效果操作(附源码)

// TwoCameraOnTimer2Dlg.cpp : 实现文件 /* CvMat, Mat, IplImage之间的互相转换 IpIImage -> CvMat CvMat matheader; CvMat * mat = cvGetMat(img, &matheader); CvMat * mat = cvCreateMat(img->height, img->width, CV_64FC3); cvConvert(img, mat) IplImage -> Mat

c# winform调用摄像头识别二维码

首先我们需要引用两个第三方组件:AForge和zxing. Aforge是摄像头操作组件,zxing是二维码识别组件.都是开源项目.避免重复造轮子. 其实一些操作代码我也是参照别人的,若侵犯您的版权,请和我联系. 此博客仅供技术交流. 下载和用法大家可以自行搜索下. 首先获取所有可用的摄像头设备,并加入到comboBox1中 1 private void getCamList() 2 { 3 try 4 { 5 //AForge.Video.DirectShow.FilterInfoCollec

在WPF中使用AForge.net控制摄像头拍照

原文:在WPF中使用AForge.net控制摄像头拍照 利用AForge.net控制摄像头拍照最方便的方法就是利用PictureBox显示摄像头画面,但在WPF中不能直接使用PictureBox.必须通过<WindowsFormsHost></WindowsFormsHost>来提供交换功能.其解决方法如下: 1.按照常规方法新建一个WPF应用程序: 2.添加引用 WindowsFormsIntegration  (与WinForm交互的支持) System.Windows.For

安卓 USB摄像头 开源库 UVCCamera 教程

https://github.com/saki4510t/UVCCamera UVCCamera 听名字就知道使用UVC( USB VEDIO CLASS) 协议的通用类库.linux原生支持,基本支持市面上所有免区USB摄像头. 此开源库包含JNI及android封装的类库.是目前最好用的安卓USB摄像头类库. UVCCamera来控制.管理与外接设备的连接,UVCCamera.setFrameCallback(final IFrameCallback callback, final int

html5中调用摄像头拍照

方法: getCamera: 获取摄像头管理对象 对象: Camera: 摄像头对象 CameraOption: JSON对象.调用摄像头的參数 PopPosition: JSON对象,弹出拍照或摄像界面指示位置 回调方法: CameraSuccessCallback: 调用摄像头操作成功回调 CameraErrorCallback: 摄像头操作失败回调 权限: 功能模块(permissions) { // ... "permissions":{ // ... "Camera

html5中拍照camera

方法: getCamera: 获取摄像头管理对象 对象: Camera: 摄像头对象 CameraOption: JSON对象,调用摄像头的参数 PopPosition: JSON对象,弹出拍照或摄像界面指示位置 回调方法: CameraSuccessCallback: 调用摄像头操作成功回调 CameraErrorCallback: 摄像头操作失败回调 权限: 功能模块(permissions) { // ... "permissions":{ // ... "Camera

HTML5+学习笔记2-------边看代码边研究貌似还是有点问题...还在研究中api中

// 拍照 function getImage() { outSet( "开始拍照:" ); var cmr = plus.camera.getCamera(); cmr.captureImage( function ( p ) { outLine( "成功:"+p ); plus.io.resolveLocalFileSystemURL( p, function ( entry ) { createItem( entry ); }, function ( e )