2.2.2 C#中显示控件BDPictureBox 的实现----DisplayContext说明续

2.2.2 C#中显示控件BDPictureBox 的实现----DisplayContext说明续

1 主要目标描述

实现图片缩放信息和中心点位置偏移信息的管理,外部调用者只要输入放大,缩小,位置偏移,其他全部由displayContext 实现

2 公共的函数部分,供界面部分调用

  1. Init_Display_Info():首次使用或者 ,图片尺寸改变时使用,
  2. update_display_img():获取当前状态下局部显示图像和坐标系转移矩阵
  3. update_display_hom2d(): 更新当前状态下坐标系转移矩阵,用于后续显示polygen或者contours使用
  4. update_Scroll_Info_after_scroll(): 滚动条拖动后更新scale和scroll信息
  5. update_Scroll_Info_after_pan(): 鼠标拖动后更新信息
  6. enlarge(): 图像放大一定的系数
  7. ensmall(): 图像缩小一定的系数
  8. fit(): 图像回复的初始全部显示状态
2.1 Init_Display_Info():首次使用或者 ,图片尺寸改变时使用
 /// <summary>
/// Init_Display_Info/// 首次使用或者 ,图片尺寸改变时使用/// </summary>/// <param name="src_size"></param>/// <param name="picturebox_rect"></param>/// <param name="_hScr0"></param>/// <param name="_vScr0"></param>public void  Init_Display_Info(OpenCvSharp.Size src_size, OpenCvSharp.Size picturebox_rect, BDControlls.Scroll.Hscroll _hScr0, BDControlls.Scroll.Vsroll _vScr0){// 原始尺寸数据scale_info.m_nImageWidth = src_size.Width;scale_info.m_nImageHeight = src_size.Height;scale_info.pictureboxSize.Width = picturebox_rect.Width;scale_info.pictureboxSize.Height = picturebox_rect.Height;// 控件尺寸数据scale_info.m_nScale_init = (float)get_display_init_zoom_rate(scale_info.pictureboxSize, src_size, ref scale_info.init_surfacesize);scale_info.update(1);scroll_info.Init_Scroll(_hScr0, _vScr0, ref scale_info);}
2.2 update_display_img():获取当前状态下局部显示图像和坐标系转移矩阵
/// <summary>
/// update_display_img
/// 更新 displayimg  and hom2d
/// </summary>
/// <param name="src"></param>
/// <param name="hom2d"></param>
/// <param name="extract_img"></param>
/// <returns></returns>
public int update_display_img(Mat src,ref Mat hom2d ,ref Mat extract_img)
{int nRet = 0;nRet= update_display_img(src,ref extract_img, ref hom2d,  scale_info.pictureboxSize, scale_info.init_surfacesize, scale_info.m_nScale_init, scale_info.zoom_cur, scroll_info.get_offset());return nRet;
}
2.3 update_display_hom2d(): 更新当前状态下坐标系转移矩阵
/// <summary>
/// update_display_hom2d
/// </summary>
/// <param name="hom2d"></param>
/// <returns></returns>
public int update_display_hom2d(ref  Mat hom2d)
{int nRet = 0;nRet= update_display_hom2d(ref hom2d, new OpenCvSharp.Size(scale_info.m_nImageWidth, scale_info.m_nImageHeight), scale_info.pictureboxSize, scale_info.init_surfacesize, scale_info.m_nScale_init, scale_info.zoom_cur, scroll_info.get_offset());return nRet;
}
2.4 update_Scroll_Info_after_scroll(): 滚动条拖动后更新scale和scroll信息
 public void update_Scroll_Info_after_scroll()
{scroll_info.update_Scroll_Info_after_scroll(ref scale_info);
}
2.5 update_Scroll_Info_after_pan(): 鼠标拖动后更新信息
public void update_Scroll_Info_after_pan(OpenCvSharp.Point m_pDist_mouse)
{scroll_info.update_Scroll_Info_after_pan(m_pDist_mouse,ref scale_info);
}
2.6 enlarge(): 图像放大一定的系数
 public void  enlarge(float zoom_rate){scale_info.enlarge(zoom_rate);scroll_info.update_Scroll_Info_after_zoom(ref scale_info);}
2.7 ensmall(): 图像缩小一定的系数
  public void ensmall(float zoom_rate)
{scale_info.ensmall(zoom_rate);scroll_info.update_Scroll_Info_after_zoom(ref scale_info);
}
2.8 fit(): 图像回复的初始全部显示状态
  public void fit()
{scale_info.update(1);scroll_info.reset_Scroll_Info();
}

3 创建一个DispManager类,实现DisplayContext类的自动创建

只要使用DispManager.get_DispCTX()就可以自动创建displayContext 类,实现即用即创建

/// <summary>
/// Manager
/// </summary>
public class DispManager
{ private static displayContext display_CTX;public static displayContext get_DispCTX(){if (display_CTX == null) display_CTX = new displayContext();return display_CTX;} }

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

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

相关文章

第二天:ALOAM前端讲解【第2部分】

三、scan2scan 3. 帧间匹配 特征关联与损失函数计算 (1)线特征 点到线的距离公式: d ϵ = ∣ ( X ~ ( k +

网安小贴士(2)OSI七层模型

一、前言 OSI七层模型是一种网络协议参考模型&#xff0c;用于描述计算机网络体系结构中的不同层次和功能。它由国际标准化组织 (ISO) 在1984年开发并发布。 二、定义 OSI七层模型&#xff0c;全称为开放式系统互联通信参考模型&#xff08;Open Systems Interconnection Refe…

微信小程序 DOM 问题

DOM 渲染问题 问题 Dom limit exceeded, please check if theres any mistake youve made.测试页面 <template><scroll-view scroll"screen" style"width: 100%;height: 100vh;" :scroll-y"true" :scroll-with-animation"true&…

记录:pcl库使用VoxelGrid对象对点云下采样时引发free(ptr)异常的解决办法 C++

如题&#xff0c;使用pcl库的VoxelGrid对象对点云下采样时&#xff0c;Memory.h文件中EIGEN_DEVICE_FUNC inline void aligned_free(void *ptr)函数的free(ptr);引发异常&#xff08;203行&#xff09;解决办法。 原使用场景代码&#xff1a; pcl::VoxelGrid<pcl::PointXYZ…

如何应对.rmallox勒索病毒:预防勒索病毒的实用技巧

导言&#xff1a; 在当今数字化世界中&#xff0c;网络安全成为了任何组织和个人都必须面对的重要挑战之一。勒索病毒&#xff08;Ransomware&#xff09;作为一种恶意软件类型&#xff0c;已经成为网络安全威胁中的重要一环。最近出现的.rmallox勒索病毒引发了广泛关注和担忧…

casefold()方法——所有大写字符转换为小写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 casefold()方法是Python3.3版本之后引入的&#xff0c;其效果和lower()方法非常相似&#xff0c;都可以转换字符串中所有大写字符为小写。…

基于深度学习的虚拟换装

基于深度学习的虚拟换装技术旨在通过计算机视觉和图像处理技术&#xff0c;将不同的服装虚拟地穿在用户身上&#xff0c;实现快速的试穿和展示。这项技术在电商、时尚和虚拟现实领域具有广泛的应用&#xff0c;能够提升用户体验&#xff0c;增加互动性。以下是关于这一领域的系…

bazel的详细使用教程

由于CSDN&#xff1b;复制近来的mk笔记格式太乱 建议看这个pdf文档 https://download.csdn.net/download/qq_41537499/89512254 为什么要学习bazel&#xff1f; 从Android 14开始&#xff0c;Google仍然强烈建议开发者使用Bazel和Kleaf构建Android内核及其工件。这表明Bazel在…

一篇文章用python GUI构建学生管理系统

引言 通过使用Python&#xff0c;我们可以利用其简洁和功能强大的特性&#xff0c;结合Tkinter提供的GUI开发能力&#xff0c;快速构建一个直观且易于使用的学生管理系统。 准备工作 在开始之前&#xff0c;确保你的开发环境中已经安装了 PythonTkinter库 安装完成后&…

华为HCIP Datacom H12-821 卷23

1.单选题 下面是路由器Huawei的部分配置信息,关于该配置信息描述错误的是: [HUAWEl] ip as-path-filter 2 permit_200 300[HUAWEI]route-policy test permit node 10 [HUAWE-route-policy]if-match as-path-filter 2 该Route Policy只能在OSPF进程中进行调用B、设置序…

LINUX高级编程part1

使用Linux系统提供的函数实现功能 shell程序的作用--->保护Linux内核&#xff0c;提供一个与用户交互的界面 shell有两种 1、 图形化shell 2、命令行shell shell编程就是使用一些shell命令来完成一些功能 在linux中创建 &#xff1a; …

Qt:5.QWidget属性介绍(Enabled属性-控件可用性设置、geometry属性-控件位置/大小设置)

目录 一、 QWidget属性的介绍&#xff1a; 二、Enabled属性-控件可用性设置&#xff1a; 2.1Enabled属性的介绍&#xff1a; 2.2获取控件当前可用状态的api——isEnabled()&#xff1a; 2.3设置控件当前的可用状态的api—— setEnabled() &#xff1a; 2.4 实例&#xff…

CMake 3.19:预设

可以以 JSON 的方式添加预设&#xff0c;用户将获得预设的默认值。find_package 支持版本范围&#xff0c;特殊的查找模块&#xff0c;比如&#xff1a;FindPython&#xff0c;有对版本范围的自定义支持。添加了许多新的权限控制&#xff0c;进一步的普及生成器表达式。 首次发…

Rhino 犀牛三维建模工具下载安装,Rhino适用于机械设计广泛领域

Rhinoceros&#xff0c;这款软件小巧而强大&#xff0c;无论是机械设计、科学工业还是三维动画等多元化领域&#xff0c;它都能展现出其惊人的建模能力。 Rhinoceros所包含的NURBS建模功能&#xff0c;堪称业界翘楚。NURBS&#xff0c;即非均匀有理B样条&#xff0c;是计算机图…

代码随想录算法跟练 | Day13 | 栈与队列 Part03

个人博客主页&#xff1a;http://myblog.nxx.nx.cn 代码GitHub地址&#xff1a;https://github.com/nx-xn2002/Data_Structure.git Day13 239. 滑动窗口最大值 题目链接&#xff1a; https://leetcode.cn/problems/sliding-window-maximum/ 题目描述&#xff1a; 给你一个整…

昇思25天学习打卡营第6天|数据变换 Transforms

学习目标&#xff1a;熟练掌握数据变换操作 熟悉mindspore.dataset.transforms接口 实践掌握常用变换 昇思大模型平台学习心得记录&#xff1a; 一、关于mindspore.dataset.transforms 1.1 变换 mindspore.dataset.transforms.Compose将多个数据增强操作组合使用。 mindspo…

最靓丽的C++开源通知弹框SnoreToasts自动监听软件及网页通知

SnoreToasts&#xff0c;作为一款轻量级的C开源项目&#xff0c;为开发者提供了一个便捷的方式来在Windows操作系统上展示通知弹框&#xff08;Toast Notifications&#xff09;。 特点与优势 轻量级&#xff1a;SnoreToasts采用了简洁的代码设计&#xff0c;避免了不必要的依…

Zabbix 配置端口监控

Zabbix 端口监控简介 在Zabbix中配置端口监控&#xff0c;可以帮助你实时监控服务器或网络设备上的特定端口是否开放和可访问。Zabbix提供了多种方式来监控端口&#xff0c;主要包括简单的端口可用性检查和更复杂的服务监控。 在Zabbix中进行端口监控时&#xff0c;不一定需要…

AI赋能视创云展元宇宙展厅,打造沉浸式智能观展体验!

在AI人工智能迅猛发展的背景下&#xff0c;视创云展将元宇宙展厅与“AI智能助手”深度融合&#xff0c;这无疑是一次前瞻性的创新尝试&#xff0c;极大地丰富了展览展示的形式与内容&#xff0c;为参观者打造了一个既沉浸又智能的观展新纪元。 一、沉浸式体验 元宇宙展厅利用虚…

【数据分析】通过python分析提取matlab工作区中的数据

#%% import scipy.io import pandas as pd import numpy as np# Load the .mat file file_path clay_C.mat mat_data scipy.io.loadmat(file_path)## 建立结果表格 # 定义行、列名 columns [0.1, 0.5, 1, 2, 3, 4, 5] index [0.1, 0.5, 1, 2, 3, 4, 5]my_psnrs_mean pd.Da…