日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF 实现调用本机摄像头~

發布時間:2023/12/4 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 实现调用本机摄像头~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WPF開發者QQ群:340500857

?? ??? 由于微信群人數太多入群請添加小編微信號

?yanjinhuawechatW_Feng_aiQ?邀請入群

?需備注WPF開發者?

? PS:有更好的方式歡迎推薦。

??接著很久前的上一篇

? 此項目使用了OpenCVSharp加載本地攝像頭,多個攝像頭支持切換展示,也可以展示rtsp地址。

使用NuGet如下:

01

代碼如下

一、創建MainWindow.xaml代碼如下。

<ws:Window?x:Class="OpenCVSharpExample.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:ws="https://github.com/WPFDevelopersOrg.WPFDevelopers.Minimal"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:OpenCVSharpExample"Icon="OpenCV_Logo.png"mc:Ignorable="d"?WindowStartupLocation="CenterScreen"Title="OpenCVSharpExample?https://github.com/WPFDevelopersOrg"?Height="450"?Width="800"><Grid><Grid.RowDefinitions><RowDefinition?Height="Auto"/><RowDefinition?/><RowDefinition?Height="Auto"/></Grid.RowDefinitions><ComboBox?Name="ComboBoxCamera"?ItemsSource="{Binding?CameraArray,RelativeSource={RelativeSource?AncestorType=local:MainWindow}}"?Width="200"?SelectedIndex="{Binding?CameraIndex,RelativeSource={RelativeSource?AncestorType=local:MainWindow}}"SelectionChanged="ComboBoxCamera_SelectionChanged"/><Image?Grid.Row="1"?Name="imgViewport"?Margin="0,4"/><StackPanel?Orientation="Horizontal"HorizontalAlignment="Center"Grid.Row="2"><!--<Button?Name="btRecord"?Click="btRecord_Click"?Content="Record"?Style="{StaticResource?PrimaryButton}"?Width="100"?Height="50"?Margin="16"/>--><Button?Name="btStop"?Click="btStop_Click"?Content="Stop"??Width="100"?Height="50"?Margin="16"/></StackPanel></Grid> </ws:Window>

二、MainWindow.xaml.cs代碼如下。

using?OpenCvSharp; using?OpenCvSharp.Extensions; using?System; using?System.Collections.Generic; using?System.Drawing; using?System.Drawing.Imaging; using?System.IO; using?System.Management; using?System.Threading; using?System.Windows; using?System.Windows.Controls; using?System.Windows.Media.Imaging; using?System.Windows.Threading;namespace?OpenCVSharpExample {///?<summary>///?MainWindow.xaml?的交互邏輯///?</summary>public?partial?class?MainWindow{private?VideoCapture?capCamera;private?Mat?matImage?=?new?Mat();private?Thread?cameraThread;public?List<string>?CameraArray{get?{?return?(List<string>)GetValue(CameraArrayProperty);?}set?{?SetValue(CameraArrayProperty,?value);?}}public?static?readonly?DependencyProperty?CameraArrayProperty?=DependencyProperty.Register("CameraArray",?typeof(List<string>),?typeof(MainWindow),?new?PropertyMetadata(null));public?int?CameraIndex{get?{?return?(int)GetValue(CameraIndexProperty);?}set?{?SetValue(CameraIndexProperty,?value);?}}public?static?readonly?DependencyProperty?CameraIndexProperty?=DependencyProperty.Register("CameraIndex",?typeof(int),?typeof(MainWindow),?new?PropertyMetadata(0));public?MainWindow(){InitializeComponent();Width?=?SystemParameters.WorkArea.Width?/?1.5;Height?=?SystemParameters.WorkArea.Height?/?1.5;this.Loaded?+=?MainWindow_Loaded;}private?void?MainWindow_Loaded(object?sender,?RoutedEventArgs?e){InitializeCamera();}private?void?ComboBoxCamera_SelectionChanged(object?sender,?SelectionChangedEventArgs?e){if?(CameraArray.Count?-?1?<?CameraIndex)return;if?(capCamera?!=?null?&&?cameraThread?!=?null){cameraThread.Abort();StopDispose();}capCamera?=?new?VideoCapture(CameraIndex);capCamera.Fps?=?30;CreateCamera();}private?void?InitializeCamera(){CameraArray?=?GetAllConnectedCameras();}List<string>?GetAllConnectedCameras(){var?cameraNames?=?new?List<string>();using?(var?searcher?=?new?ManagementObjectSearcher("SELECT?*?FROM?Win32_PnPEntity?WHERE?(PNPClass?=?'Image'?OR?PNPClass?=?'Camera')")){foreach?(var?device?in?searcher.Get()){cameraNames.Add(device["Caption"].ToString());}}return?cameraNames;}void?CreateCamera(){cameraThread?=?new?Thread(PlayCamera);cameraThread.Start();}private?void?PlayCamera(){while?(capCamera?!=?null?&&?!capCamera.IsDisposed){capCamera.Read(matImage);if?(matImage.Empty())?break;Dispatcher.BeginInvoke(DispatcherPriority.Normal,?new?Action(()?=>{var?converted?=?Convert(BitmapConverter.ToBitmap(matImage));imgViewport.Source?=?converted;}));}}private?void?btStop_Click(object?sender,?RoutedEventArgs?e){StopDispose();btStop.IsEnabled?=?false;}void?StopDispose(){if?(capCamera?!=?null?&&?capCamera.IsOpened()){capCamera.Dispose();capCamera?=?null;}}void?CreateRecord(){cameraThread?=?new?Thread(PlayCamera);cameraThread.Start();}BitmapImage?Convert(Bitmap?src){System.Drawing.Image?img?=?src;var?now?=?DateTime.Now;var?g?=?Graphics.FromImage(img);var?brush?=?new?SolidBrush(System.Drawing.Color.Red);g.DrawString($"北京時間:{?now.ToString("yyyy年MM月dd日?HH:mm:ss")}",?new?System.Drawing.Font("Arial",?18),?brush,?new?PointF(5,?5));brush.Dispose();g.Dispose();MemoryStream?ms?=?new?MemoryStream();img.Save(ms,?ImageFormat.Bmp);ms.Seek(0,?SeekOrigin.Begin);BitmapImage?image?=?new?BitmapImage();image.BeginInit();image.StreamSource?=?ms;image.EndInit();image.Freeze();return?image;}protected?override?void?OnClosed(EventArgs?e){StopDispose();}} }

02


效果預覽

鳴謝素材提供者 -?屈越

源碼地址如下

Github:https://github.com/WPFDevelopersOrg

https://github.com/WPFDevelopersOrg/OpenCVSharpExample

Gitee:https://gitee.com/WPFDevelopersOrg

WPF開發者QQ群:?340500857?

Github:https://github.com/WPFDevelopersOrg

出處:https://www.cnblogs.com/yanjinhua

版權:本作品采用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。

轉載請著名作者 出處 https://github.com/WPFDevelopersOrg

掃一掃關注我們,

更多知識早知道!

點擊閱讀原文可跳轉至源代碼

總結

以上是生活随笔為你收集整理的WPF 实现调用本机摄像头~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。