海康工业相机WPF打开方式

news2024/12/26 23:23:03

1.通过nuget安装Gige和imageLibrary 

GitHub - Touseefelahi/GigeVision: Simple GigeVision implementation, GVSP, GVCP protocol implemented

2.窗体布局xaml代码

<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:ImageControl="clr-namespace:Stira.ImageLibrary.Wpf;assembly=Stira.ImageLibrary.Wpf"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid VerticalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <StackPanel
            Grid.Row="0"
            HorizontalAlignment="Center"
            Orientation="Horizontal">
            <TextBlock Text="IP" />
            <TextBox MinWidth="100" Text="{Binding Camera.IP}" />
            <Button
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Click="Button_Click"
                Content="Start Stream" />
            <TextBlock Text="{Binding Camera.Width}" />
            <CheckBox
                Height="20"
                IsChecked="{Binding Camera.IsRawFrame}"
                ToolTip="Is Raw Frame" />
            <TextBlock x:Name="cameraCount" />
        </StackPanel>

        <ImageControl:LightImage x:Name="lightControl" Grid.Row="1" />
        <TextBlock
            x:Name="Fps"
            Grid.Row="1"
            VerticalAlignment="Bottom"
            Panel.ZIndex="2"
            />
    </Grid>
</Window>

 3.实现代码

using GigeVision.Core.Services;
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;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private Camera camera;
        private int fpsCount;
        private int height = 600;
        private bool isLoaded;
        private int width = 800;
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this.Camera;
            Setup();
        }
        public Camera Camera
        {
            get { return camera; }
            set { camera = value; }
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
           // Camera_.GVc
            if (!Camera.Gvcp.IsXmlFileLoaded)
            {
                isLoaded = await Camera.Gvcp.ReadXmlFileAsync();
            }

            if (camera.IsStreaming)
            {
                await camera.StopStream().ConfigureAwait(false);
            }
            else
            {
                width = (int)camera.Width;
                height = (int)camera.Height;
                Dispatcher.Invoke(() =>
                {
                    lightControl.WidthImage = width;
                    lightControl.HeightImage = height;
                    lightControl.IsColored = !camera.IsRawFrame;
                });
                await camera.StartStreamAsync().ConfigureAwait(false);

                //camera.OffsetX = 264;
                //camera.OffsetY = 208;

                //await camera.SetOffsetAsync();
            }
        }

        private void FrameReady(object sender, byte[] e)
        {
            Dispatcher.Invoke(() => lightControl.RawBytes = e, System.Windows.Threading.DispatcherPriority.Render);
            fpsCount++;
        }

        private async void Setup()
        {
            camera = new Camera();
            //camera.StreamReceiver = new StreamReceiverParallel();
            GigeVision.Core.NetworkService.AllowAppThroughFirewall();
            var listOfDevices = await camera.Gvcp.GetAllGigeDevicesInNetworkAsnyc().ConfigureAwait(true);
            cameraCount.Text = "Cam count: " + listOfDevices.Count.ToString();
            if (listOfDevices.Count > 0)
            {
                Camera.IP = listOfDevices.FirstOrDefault()?.IP;
                Camera.RxIP = listOfDevices.FirstOrDefault()?.NetworkIP;
            }
            //camera.Gvcp.ForceIPAsync(listOfDevices[0].MacAddress, "192.168.10.243");
            camera.Payload = 5000;

            camera.IsMulticast = true;
            camera.FrameReady += FrameReady;
            camera.Gvcp.ElapsedOneSecond += UpdateFps;
        }

        private void UpdateFps(object sender, EventArgs e)
        {
            Dispatcher.Invoke(() =>
            Fps.Text = fpsCount.ToString(), System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            fpsCount = 0;
        }
    }
}

4.实现效果

5.这样的方式,不用调用海康的DLL,简单方便

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面向对象学习笔记

常见代码块应用 局部代码块 在方法中出现&#xff0c;限定变量的生命周期构造代码块&#xff08;初始化块&#xff09; 在类中方法外出现&#xff0c;多个构造方法方法中相同的代码存放到一起&#xff0c;每次调用构造都执行&#xff0c;在调用构造方法前执行静态代码块 在类中…

达摩院+华为 | NLP博士的春招历程

作者 | luan2006 整理 | NewBeeNLP 面试锦囊之面经分享系列&#xff0c;持续更新中 赶紧后台回复"面试"加入讨论组交流吧 写在前面 本博均985&#xff08;不同校&#xff09;、现北京Top2计算机类博士生、方向为人工智能-自然语言处理。 个人优势&#xff1a;绩点年…

PeekingDuck

介绍 计算机视觉项目可能会非常令人望而生畏&#xff0c;涉及到各种工具和包&#xff0c;如OpenCV、TensorFlow和PyTorch等等。不仅需要熟悉所涉及的工具和API&#xff0c;还需要正确组合各个包&#xff0c;以使整个计算机视觉流水线正常工作。 例如&#xff0c;OpenCV以[H&…

玩转百问网东山Pi壹号-SSD202 Linux开发板(一)

点击上方“嵌入式应用研究院”&#xff0c;选择“置顶/星标公众号” 干货福利&#xff0c;第一时间送达&#xff01; 来源 | 嵌入式应用研究院 整理&排版 | 嵌入式应用研究院 很早之前就做过SSD20x相关的平台&#xff0c;刚好手里有一块东山Pi壹号-开发板&#xff0c;于是我…

儿童睡眠慢波的起源、同步和传播

摘要 目的&#xff1a;使用EEG delta功率(&#xff1c;4Hz)测量的睡眠慢波活动在整个发育过程中发生显著变化&#xff0c;反映了大脑功能和解剖结构的变化。然而&#xff0c;个体慢波特征随年龄的变化尚未被彻底研究。在这里&#xff0c;本研究旨在表征儿童期到成年期的个体慢…

Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解

文章目录 1.原理解析1.1.SDS的内部实现原理1.1.1 Redis 6.0版本和Redis5.0对比1.1.2 redis6和redis5对比1.1.3 优势1.1.3.1. 动态扩容1.1.3.2. 常数复杂度获取字符串长度1.1.3.3. 杜绝缓冲区溢出1.1.3.4. 减少修改字符串的内存重新分配次数1.1.3.5. 二进制安全1.1.3.6. 兼容部分…

SpringMVC06:Json交互处理

目录 一、什么是JSON? 二、代码测试 1、新建一个module&#xff0c;SpringMVC-05-json&#xff0c;添加web支持和lib包 2、在index.jsp中编写测试内容 3、配置tomcat&#xff0c;启动项目&#xff0c;在浏览器中打开&#xff0c;查看控制台输出 4、controller返回JSON数据…

AC变DC220V变5V小家电电源芯片-AH8652、AH8669

Q: 什么是AH8652和AH8669电源芯片? A: AH8652和AH8669都是AC变DC的电源芯片&#xff0c;适用于将输入的交流电压&#xff08;220V&#xff09;转换为5V直流电压输出&#xff0c;用于小家电的电源模块等应用。 AC变DC220V变5V小家电电源芯片-AH8669 Q: AH8652和AH8669的最大输…

2023智源大会议程公开丨自动驾驶论坛

6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&#xff1f;与会知名嘉宾包括&#xff0c;图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…

Observability:如何有效地将应用日志发送到 Elasticsearch

在今天的文章中&#xff0c;我们将探讨使用 3 种不同的架构发送应用的日子到 Elasticsearch。我们将详述它们的优缺点。更多关于日志架构的介绍&#xff0c;请参考 “Elastic&#xff1a;开发者上手指南” 中的 “Elastic Stack 架构” 部分。 介绍 采用 Elastic Stack&#x…

前端录制回放rrweb

rrweb 是 ‘record and replay the web’ 的简写&#xff0c;旨在利用现代浏览器所提供的强大 API 录制并回放任意 web 界面中的用户操作。 rrweb中文文档 https://github.com/rrweb-io/rrweb/blob/master/guide.zh_CN.md 本文项目地址 https://github.com/qdfudimo/vue-rrweb…

网安学习|Kail安全渗透测试系统之【前期信息收集】工具实践学习

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

达梦数据库与MySQL的区别及语法差异

达梦数据库与MySQL的区别及其SQL语句对比 简介&#xff1a;正文&#xff1a;1. 达梦数据库和MySQL的概述2. 特点对比3. SQL语句对比1. 数据类型&#xff1a;2. 语法&#xff1a;1. DDL&#xff08;数据定义语言&#xff09;的差异&#xff1a;2. DML&#xff08;数据操作语言&a…

面向对象——多态、抽象类、接口

学习资料来自&#xff1a;黑马程序员&#xff0c;内容仅为学习记录&#xff0c;侵删 多态 多态&#xff1a;事务存在的多种形态 多态的前提&#xff1a;1、有继承关系&#xff1b;2、重写父类方法&#xff1b;3、父类引用指向子类对象 面向对象 面向对象多态中成员访问特点…

动态测试数据处理

分类 动态测试数据&#xff1a; 1、确定性数据&#xff1a;能够用明确的数学表达式进行描述的数据称为确定性数据。 Ⅰ、周期数据 Ⅱ、非周期数据 2、随机性数据&#xff1a;无法用明确的数学表达式表述&#xff1b;若在一个…

强大的工具:APISpace IP归属地查询API

引言 IP地址在互联网世界中扮演着重要的角色&#xff0c;对于许多应用程序和服务来说&#xff0c;了解IP地址的归属地信息可以提供有价值的洞察和功能。 在本文中&#xff0c;我们将介绍一种名为IP归属地-IPv4区县级 API 的强大工具&#xff0c;它提供了查询 IP 地址归属地信…

如何解释物联网IOT平台?

物联网开发的本质是将各种物品通过网络连接在一起&#xff0c;并对这些物品进行数字化管理&#xff0c;从而实现智能自动化。在物联网的早期阶段&#xff0c;一些物联网应用程序&#xff08;例如&#xff0c;智能电表&#xff09;使用软件将信息传输到后台服务器。但随着时间的…

华为路由器:多区域OSPF协议实验

一、实验拓扑 二、ospf基本概念复习 区域划分&#xff1a;area0为骨干区域&#xff0c;其他area1、area2都为普通区域/常规区域。普通区域必须和骨干区域直接相连。ABR&#xff1a;区域边界路由器。R2、R3位于两个区域的中间&#xff0c;我们称之为区域边界路由器 &#xff1b…

ObjectARX如何监控实体双击事件(利用钩子函数或者反应器)

目录 1 实现方法1——钩子函数1.1 钩子函数的作用1.2 利用钩子函数监控双击事件 2 实现方法2——反应器2.1 反应器的作用2.2 利用编辑器反应器监控双击事件 在ObjectARX开发中&#xff0c;常常要监控鼠标的双击事件&#xff0c;比如&#xff0c;往一个实体中写了扩展数据&#…

基于html+css的图展示115

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…