【VM服务管家】VM4.x算子SDK开发_3.4 控件嵌入类

news2024/11/29 10:38:23

目录

  • 3.4.1 图片存储:图片保存的方法
  • 3.4.2 辅助十字线:给图像添加辅助十字线的方法
  • 3.4.3 控件调用:在WPF中使用Winform控件的方法
  • 3.4.4 图形改变事件:渲染控件上图形改变事件的实现方法
  • 3.4.5 鼠标事件:渲染控件上鼠标事件实现的方法

3.4.1 图片存储:图片保存的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发如何存储图片。
解答
调用SaveImage(图片储存),以存储图片到E盘为例,示例代码如下,其中要判断路径中的文件夹已经创建。

1.	C#
2.	
3.	string imageName="a";
4.	MVD_FILE_FORMAT ms=MVD_FILE_FORMAT.MVD_FILE_BMP;//图片格式
5.	//保存原图
6.	runImage.SaveImage(“E:\\”+imageName+”_origin.bmp”);
7.	//保存渲染图,参数分别为图片路径,图片格式,图片质量(0-100)
8.	mvdRenderActivex1.SaveImage(“E:\\”+imageName+”_render.bmp”,ms,100,MVD_SAVE_TYPE.MVD_SAVE_RESULT_IMAGE);

问题根因
不熟悉相关接口的使用。

3.4.2 辅助十字线:给图像添加辅助十字线的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:有的用户在使用算子SDK开发时,希望能够在图像上显示辅助十字线。
解答
算子SDK在图像上显示辅助十字线的方法如下:

1.	c#
2.	 
3.	CMvdLineSegmentF line1 = new CMvdLineSegmentF(new MVD_POINT_F(mvdimage.Width/2, 0),new MVD_POINT_F(mvdimage.Width / 2, mvdimage.Height ));//定义线段
4.	CMvdLineSegmentF line2 = new CMvdLineSegmentF(new MVD_POINT_F(0, mvdimage.Height/2),new MVD_POINT_F(mvdimage.Width, mvdimage.Height/2));//定义线段
5.	line1.BorderStyle = MVD_DASH_STYLE.MvDashStyleDashDot;//设置线型
6.	line1.BorderColor = new MVD_COLOR(250, 0, 0);//设置线的颜色
7.	line2.BorderStyle = MVD_DASH_STYLE.MvDashStyleDashDot;//设置线型
8.	line2.BorderColor = new MVD_COLOR(250, 0, 0);//设置线的颜色
9.	mvdRenderActivex1.AddShape(line1);//添加线段1
10.	mvdRenderActivex1.AddShape(line2);//添加线段2
11.	mvdRenderActivex1.Display();//渲染

问题根因
不了解算子SDK的相关接口

3.4.3 控件调用:在WPF中使用Winform控件的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:在算子SDK开发过程中,用户如何使用封装好的Winform模板匹配等控件?
解答

  1. 首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll。
    在这里插入图片描述

  2. 在要使用WinForm控件的WPF窗体的XAML文件中添加引用。示例代码如下:

C# 
 
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows. Forms"
xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly= WindowsFormsIntegration"
  1. 在WPF的容器控件内如StackPanel内首先要添加WinForm控件的宿主容器,用于衔接WPF和WinForm。示例代码如下:
C# XAML
 
<StackPanel>
	<wfi:WindowsFormsHost x:Name="host" Margin="0,0,0,0" />      
</StackPanel>"
  1. 在代码中定义UserControl1 user= new UserControl1 (); 这里不要忘记添加引用。UserControl1 是自定义的Winform用户控件,用于存放控件。然后再将控件放入WindowsFormsHost 中,示例代码如下:
C# .CS
 
UserControl1 user= new UserControl1 ();
this.host.Child = user; //使XML文件中的host中的内容为用户控件user
  1. 如算子SDK中渲染控件在WPF中的调用,添加渲染控件dll,示例代码如下。
    在这里插入图片描述
    在这里插入图片描述

问题根因
对于WPF如何使用自定义Winform控件不了解。

3.4.4 图形改变事件:渲染控件上图形改变事件的实现方法

描述
环境:MVDAlgrithm SDK3.4及以上 +VS2013及以上
现象:算子SDK中如何使用图形改变事件?
解答
在算子SDK中支持五种类型的图形改变事件,分别是图形添加事件(MVD_SHAPE_ADDED),图形删除事件(MVD_SHAPE_DELETED),图形编辑事件(MVD_SHAPE_EDITED),图形选中事件(MVD_SHAPE_SELECTED)以及未定义事件(MVD_SHAPE_UNDEFINE)。下面以使用最多的图形添加事件为例,代码如下:

C#  
//注册图形改变事件
this.mvdRenderActivex1.MVDShapeChangedEvent += mvdRenderActivex1_MVDShapeChangedEvent;

//实现图形改变事件
private void mvdRenderActivex1_MVDShapeChangedEvent(VisionDesigner.MVDRenderActivex.MVD_SHAPE_EVENT_TYPE enEventType, VisionDesigner.MVD_SHAPE_TYPE enShapeType, VisionDesigner.CMvdShape cShapeObj)
{
    if (MVDRenderActivex.MVD_SHAPE_EVENT_TYPE.MVD_SHAPE_ADDED == enEventType)
    {
        //添加图形时具体执行的逻辑代码
    }
}

问题根因
不熟悉图形改变事件的实现方式。

3.4.5 鼠标事件:渲染控件上鼠标事件实现的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发中,渲染控件如何触发鼠标事件
解答
在算子sdk开发过程中,支持7中鼠标事件类型。切鼠标左键按下(LButtonDown),鼠标左键抬起(LButtonUp),鼠标右键按下(RButtonDown),鼠标右键抬起(RButtonUp),鼠标左键双击(LButtonDblClk),鼠标移动(MouseMove),鼠标滚轮(MouseWheel)。比较常用的是根据鼠标在控件上的位置来显示图像坐标及像素值,代码如下所示:

C#
//在初始化的时候,设置交互模式,标准交互+自定义交互(StandardAndCustom)
mvdRenderActivex1.SetConfiguration((uint)MVD_RENDER_PARAM_KEY.MvdRenderInteractType, (int)MVDRenderInteractType.StandardAndCustom);

//事件注册,打开渲染控件属性,选择相应事件可以自动生成
//用户想要实现自定义交互需通过SetConfiguration接口启用自定义交互
//用户可根据enMouseEventType判断鼠标事件类型,编写对应的响应函数
//示例:实时显示鼠标所在位置的图像坐标和像素值
private void mvdRenderActivex1_MVDMouseEvent(MVDMouseEventType enMouseEventType, int nPointX, int nPointY, short nZDelta)
{    
    try
    {
        //窗口坐标转图像坐标
        float fImgX = 0.0f, fImgY = 0.0f;
        mvdRenderActivex1.TransformCoordinate(nPointX, nPointY, ref fImgX, ref fImgY, MVDCoordTransType.Wnd2Img);

        //获取像素信息显示
        do
        {
            if (false == _ImageLoaded)
            {
                break;
            }

            int nImagePointX = (int)fImgX;
            int nImagePointY = (int)fImgY;
            int nWidth = (int)_InputImage.Width;
            int nHeight = (int)_InputImage.Height;
            if (nImagePointX < 0 || nImagePointX >= nWidth
                || nImagePointY < 0 || nImagePointY >= nHeight)
            {
                break;
            }

            string pixelInfo = string.Empty;
            List<byte> pixelValue = _InputImage.GetPixel(nImagePointX, nImagePointY);
            MVD_PIXEL_FORMAT enPixelFormat = _InputImage.PixelFormat;
            if (MVD_PIXEL_FORMAT.MVD_PIXEL_MONO_08 == enPixelFormat)
            {
                pixelInfo = string.Format("X:{0:D4} Y:{1:D4} | R:{2:D3} G:{3:D3} B:{4:D3}", nImagePointX, nImagePointY, pixelValue[0], pixelValue[0], pixelValue[0]);
            }
            else if (MVD_PIXEL_FORMAT.MVD_PIXEL_RGB_RGB24_C3 == enPixelFormat)
            {
                pixelInfo = string.Format("X:{0:D4} Y:{1:D4} | R:{2:D3} G:{3:D3} B:{4:D3}", nImagePointX, nImagePointY, pixelValue[0], pixelValue[1], pixelValue[2]);
            }
            else
            {
                throw new MvdException(MVD_MODULE_TYPE.MVD_MODUL_APP, MVD_ERROR_CODE.MVD_E_SUPPORT, "Unsupported pixel format.");
            }
            this.tbPixelInfo.Text = pixelInfo;
        } while (false);
    }
    catch (MvdException ex)
    {
        this.rtbInfoMessage.Text += String.Format("Fail to respond to mouse event! Module : {0}, ErrorCode : 0x{1}, Message : {2}.\r\n", ex.ModuleType.ToString(), ex.ErrorCode.ToString("X"), ex.Message);
    }
    catch (System.Exception ex)
    {
        this.rtbInfoMessage.Text += String.Format("Fail to respond to mouse event! Message : {0}, StackTrace : {1}.\r\n", ex.Message, ex.StackTrace);
    }
}

问题根因
不熟悉鼠标事件的实现方法

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

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

相关文章

Hive的基本操作和查询语法以及案例(大数据查询)

1、 13-Hive的基本操作和查询语法以及案例_hive分区表查询语句_大数据下的画像人的博客-CSDN博客 2、SQL 中多个 and or 的组合运算 SQL 中多个 and or 的组合运算_weixin_30611509的博客-CSDN博客sql关系型运算符优先级高到低为&#xff1a;not >and> orAND、OR运算符…

零基础想成为黑客,只需要四步

前言 首先要明白&#xff0c;该篇文章说的黑客不是那种窃取别人信息、攻击别人系统的黑客&#xff0c;说的是调试和分析计算机安全系统的网络安全工程师。 黑客技术的核心之一就是渗透攻防技术&#xff0c;是为了证明网络防御按照预期计划正常运行而提供的一种机制。就是通过模…

语音处理加窗分帧

语音处理加窗分帧 一、分帧 语音数据和视频数据不同&#xff0c;本没有帧的概念&#xff0c;但是为了传输与存储&#xff0c;我们采集的音频数据都是一段一段 的。为了程序能够进行批量处理&#xff0c;会根据指定的长度(时间段或者采样数)进行分段&#xff0c;结构化为我们编程…

从FPGA说起的深度学习(八)-数据并行性

这是新的系列教程&#xff0c;在本教程中&#xff0c;我们将介绍使用 FPGA 实现深度学习的技术&#xff0c;深度学习是近年来人工智能领域的热门话题。 在本教程中&#xff0c;旨在加深对深度学习和 FPGA 的理解。 用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为…

11款专家级渗透测试工具

导语&#xff1a;在本文中&#xff0c;我们将深入研究渗透测试员用来挫败客户防御系统的工具。 渗透测试员&#xff0c;有时也称“道德黑客”&#xff0c;他们本质上是安全专家&#xff0c;负责对客户的网络或系统发起模拟攻击&#xff0c;以寻找潜在漏洞。他们的目标是展示恶意…

电脑技巧:Windows系统原版纯净软件必备的两个网站

目录 一、MSDN我告诉你 二、helloWindows 三、总结 Windows系统是个人电脑使用最广泛的操作系统&#xff0c;大家可能会遇到下载Windows镜像、SQLServer、Office等官方软件&#xff0c;会遇到各种各样捆绑、广告软件&#xff0c;甚至还有可能电脑被植入病毒的风险。该如何避…

代码随想录算法训练营第四十五天|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

文章目录 70. 爬楼梯 &#xff08;进阶&#xff09;322. 零钱兑换279.完全平方数 今天的题一道是求装满背包的可能情况;另两道都是求装满背包的所需的最小物品数目&#xff0c;不用考虑是组合还是排序问题 70. 爬楼梯 &#xff08;进阶&#xff09; 背包问题&#xff0c;求装满…

设置苹果电脑vsode在新窗口中打开文件

0、前言 最近切换到mac电脑工作&#xff0c;又得重新安装一些工具软件并设置。虽然这些设置并表示啥复杂的设置&#xff0c;但是久了不设置还是会忘记。于是记录之&#xff0c;也希望给能帮助到需要的人。 我们使用vscode阅读或者编辑文件时&#xff0c;有时候希望同时打开多…

RabbitMQ 01 概述

什么是消息队列 进行大量的远程调用时&#xff0c;传统的Http方式容易造成阻塞&#xff0c;所以引入了消息队列的概念&#xff0c;即让消息排队&#xff0c;按照队列进行消费。 它能够将发送方发送的信息放入队列中&#xff0c;当新的消息入队时&#xff0c;会通知接收方进行处…

MySQL的JSON 数据类型

概述&#xff1a; MySQL提供了一个专门用于存储JSON数据的数据类型&#xff1a;JSON。JSON数据类型允许您在MySQL数据库中存储和操作JSON格式的数据。 以下是关于JSON数据类型的一些基本操作和函数&#xff1a; 创建表&#xff1a; 要在表中创建一个JSON类型的列&#xff0…

C/C++每日一练(20230429)

目录 1. 螺旋矩阵 &#x1f31f;&#x1f31f; 2. 戳气球 &#x1f31f;&#x1f31f;&#x1f31f; 3. 实现五则运算 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1…

从0搭建Vue3组件库(十):如何搭建一个 Cli 脚手架

本篇文章将实现一个名为create-easyest脚手架的开发,只需一个命令npm init easyest就可以将整个组件库开发框架拉到本地。 创建 Cli 包 首先,我们在 packages 目录下新建 cli 目录,同执行pnpm init进行初始化,然后将包名改为create-easyest 这里需要知道的是当我们执行npm in…

layui框架实战案例(21):layui上传的哪些事(layui.upload组件、 file文件域、php后台上传)

上传的哪些事 一、核心方法与基础参数选项二、使用upload组件1.调用layui.upload2.文件上传进度条3.弹出进度条4.完整核心代码5.效果预览6.后台上传代码7.附带参数data 一、核心方法与基础参数选项 upload.render({elem: #uploadlicense//指向容器选择器, url: ?mIndex&ai…

Python每日一练(20230429)

目录 1. 地下城游戏 &#x1f31f;&#x1f31f;&#x1f31f; 2. 杨辉三角 II &#x1f31f; 3. 旋转数组 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

HCIA-RS实验-路由配置-静态路由缺省路由(2)

接上文HCIA-RS实验-路由配置-静态路由&缺省路由 继续完成缺省路由&#xff1b;其他原截图就不再一一截图&#xff0c;有需要往回看一篇。 关闭上一篇的接口shutdown&#xff08;重新启动&#xff09; 上一篇在R2关闭的接口2 需要重新启动&#xff0c;输入 undo shutdown…

React--》Redux Toolkit的使用讲解

目录 Redux Toolkit redux toolkit的基本使用 RTK代码模块化 RTK QUERY的使用 useQuery参数 Redux Toolkit Redux Toolkit是Redux的工具包&#xff0c;简称RTK&#xff0c;可以帮助我们处理使用Redux过程中的重复性工作&#xff0c;简化Redux中的各种操作&#xff0c;当然…

< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>

》基于Vue状态的过渡动画 - Transition 和 TransitionGroup &#x1f449; 一、Vue Transition 简介> Transition 和 TransitionGroup 之间的区别 &#x1f449; 二、<Transition> 组件> 触发 <Transition> 组件的场景&#xff1a;> 基于 CSS 的过渡效果&…

LeetCode:面试题 02.07. 链表相交

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 题解目录 一、&#x1f331;[面试题 02.07. 链表相交](https://leetcode.cn/problems/in…

Python可视化学习——使用JSON进行数据转换、pyecharts模块调用以及可视化案例的介绍(可视化案例数据暂无),柱状图及动态柱状图的构建

数据可视化 可视化效果一&#xff1a;2020年印美日新冠累计确诊人数 2020年是新冠疫情爆发的一年&#xff0c;随着疫情的爆发&#xff0c;国内外确诊人数成了大家关心的热点&#xff0c;相信大家都有看过类似的疫情报告.本案例对印度美国日本三个国家确诊人数的进行了可视化处…

术数基础背诵口诀整理

物象对应 五行方位天干神兽季节气候星宿生成数脏器木东甲乙青龙春风岁八肝火南丙丁朱雀夏热荧惑七心土中戊己&#xff1f;长夏湿镇五脾金西庚辛白虎秋燥太白九肺水北壬癸玄武冬寒辰六肾 口诀&#xff1a;东方甲乙青龙木&#xff0c;南方丙丁朱雀火&#xff0c;戊己勾陈腾蛇土&…