<Window x:Class="WpfApp1.MainWindow"
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:WpfApp1" xmlns:WPFMediaKit="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid> <StackPanel>
<ComboBox Name="cbCameras" SelectionChanged="cbCameras_SelectionChanged"/>
<!--选摄像头-->
<WPFMediaKit:VideoCaptureElement Height="200" x:Name="captureElement"/>
<!--预览画面-->
<Button Height="50" x:Name="btnCapture" Content="拍照" Click="btnCapture_Click"/>
<!--拍照按钮-->
<Image x:Name="img" />
</StackPanel>
</Grid>
</Window>

  

using System;
using System.Collections.Generic;
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.Navigation;
using System.Windows.Shapes;
using System.Runtime.InteropServices;
using WPFMediaKit.DirectShow.Controls;
using System.IO; namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{ public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded; } private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
cbCameras.ItemsSource = MultimediaUtil.VideoInputNames;
if (MultimediaUtil.VideoInputNames.Length > 0)
{
cbCameras.SelectedIndex = 0;
}
else
{
MessageBox.Show("no video cap device");
}
}
private void cbCameras_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
captureElement.VideoCaptureSource = (string)cbCameras.SelectedItem;
} /// <summary>
/// 拍照
/// </summary> private void btnCapture_Click(object sender, RoutedEventArgs e)
{
//captureElement. 怎么抓取高清的原始图像
RenderTargetBitmap bmp = new RenderTargetBitmap(
(int)captureElement.ActualWidth,
(int)captureElement.ActualHeight,
96, 96, PixelFormats.Default); //为避免抓不全的情况,需要在Render之前调用Measure、Arrange
//为避免VideoCaptureElement显示不全,需要把
//VideoCaptureElement的Stretch="Fill"
captureElement.Measure(captureElement.RenderSize);
captureElement.Arrange(new Rect(captureElement.RenderSize));
bmp.Render(captureElement);
//这里需要创建一个流以便存储摄像头拍摄到的图片。
//当然,可以使文件流,也可以使内存流。
BitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
MemoryStream ms = new System.IO.MemoryStream();
encoder.Save(ms);
ms.Position = 0;
BitmapImage b = new BitmapImage();
b.BeginInit();
b.StreamSource = ms;
b.EndInit();
img.Source = b;
ms.Position = 0;
FileStream f = File.Open("c:\\1.jpg", FileMode.OpenOrCreate);
f.Write(ms.ToArray(), 0, (int)ms.Length);
f.Close(); } } }

  

WPFMediaKit --WPF项目中 调用摄像头拍照的更多相关文章

  1. 【MediaKit】WPF项目中 调用摄像头拍照的开发包

    今天遇到一个 人事的项目,项目中需要调用摄像头给员工照相.如何解决这个问题呢? 介绍一个开发包给你,MediaKit.论坛里头的人都说好,但是黑兔觉得大家好才是真的好.你不妨试试~ 第一步:添加WPF ...

  2. html5中调用摄像头拍照

    方法: getCamera: 获取摄像头管理对象 对象: Camera: 摄像头对象 CameraOption: JSON对象.调用摄像头的參数 PopPosition: JSON对象,弹出拍照或摄像 ...

  3. android: 调用摄像头拍照

    很多应用程序都可能会使用到调用摄像头拍照的功能,比如说程序里需要上传一张图片 作为用户的头像,这时打开摄像头拍张照是最简单快捷的.下面就让我们通过一个例子来学 习一下,如何才能在应用程序里调用手机的摄 ...

  4. 在WPF程序中使用摄像头兼谈如何使用AForge.NET控件(转)

    前言: AForge.NET 是用C#写的一个关于计算机视觉和人工智能领域的框架,它包括图像处理.神经网络.遗传算法和机器学习等.在C#程序中使用摄像头,我习惯性使用AForge.NET提供的类库.本 ...

  5. C# - VS2019调用AForge库实现调用摄像头拍照功能

    前言 作为一名资深Delphi7程序员,想要实现摄像头扫描一维码/二维码功能,发现所有免费的第三方库都没有简便的实现办法,通用的OpenCV或者ZXing库基本上只支持XE以上的版本,而且一维码的识别 ...

  6. android ——调用摄像头拍照和相册

    先在布局文件中加入两个按钮和一个图片控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  7. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  8. AForge调用摄像头拍照时设置分辨率

    简单记录下AForge2.2.5.0版本调用摄像头拍照时设置分辨率的方法. FilterInfo info = _videoDevices[0];//获取第一个摄像头 _cameraDevice = ...

  9. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  10. WPF项目中解决ConfigurationManager不能用(转)

    https://blog.csdn.net/MOESECSDN/article/details/78107888 在WPF项目中遇到这样的问题,做一下笔记.希望对自己和读者都有帮助. 在aap.con ...

随机推荐

  1. 构建自己的DEX

    构建自己的DEX 简介:用户可通过主流钱包Dapp浏览器,访问URL地址,进行Swap, BSC链 界面演示 技术栈 Solidity React Typescript Vite Wagmi Open ...

  2. 【笔记】 STL容器

    [笔记] STL容器 vector vector<int> v; v.push_back(x); v.emplace(x); v.size(); v.erase(v.begin(),v.b ...

  3. Python字典推导式

    要求打印字典中值小于1的key和value d = {"a": 1, "b":2, "c":3} d = {key: value for k ...

  4. 模态内重叠优化,简单有效的CLIP微调方法 | BMVC'24 Oral

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: CLIP Adaptation by Intra-modal Overlap Reduction 论文地址:https://arxiv.org ...

  5. 牛客小白月赛105 (Python题解)

    牛客小白月赛105 (Python题解) 比赛链接:点击传送 A-lz的吃饭问题 代码: a, b = map(int,input().split()) c, d = map(int,input(). ...

  6. php之Opcache深入理解

    PHP项目中,尤其是在高并发大流量的场景中,如何提升PHP的响应时间,是一项十分重要的工作.而Opcache又是优化PHP性能不可缺失的组件,尤其是应用了PHP框架的项目中,作用更是明显. 1. 概述 ...

  7. Go Vue3 CMS管理后台(前后端分离模式)

    本后台使用前后端分离模式开发,前端UI为Vue3+Ant Design Vue,后端Api为Go+Gin,解耦前后端逻辑,使开发更专注 技术栈 前端:Vue3,Ant Design Vue,Axios ...

  8. 【集成-Nacos】SpringBoot集成Nacos

    注意:以下主要演示动态配置 Nacos 是什么? Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生 ...

  9. openEuler欧拉配置MySQL8的MGR单主双从

    ​一. 系统优化(三个节点全部操作) 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭selinux echo "S ...

  10. Vue-Router 面试题 (2023-09-13更新)

    路由导航守卫 和 Vue 实例生成周期钩子函数的执行顺序? 路由导航守卫 都是在 Vue 实例生命周期钩子函数 之前执行的 Vue-Router 有哪几种导航钩子? 1. 全局守卫 全局前置守卫:be ...