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.mfbz.cn/a/767563.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型在软件测试领域的应用场景有哪些?_大模型在测试领域应用

在数字化转型的大背景下&#xff0c;在软件定义一切的趋势下&#xff0c;软件测试人员需要接触和理解的信息越来越多&#xff0c;并呈现加速增长的态势。需求越来越大&#xff0c;交付周期越来越短&#xff0c;受制于体力和能力限制&#xff0c;测试人员的效率和质量难以同步提…

Mysql在Windows系统下安装以及配置

目录 一、下载Mysql 二、安装Mysql及环境配置 一、下载Mysql 1. 下载地址 官网:https://www.mysql.com&#xff0c;这里我选用的是Mysql8.0.37版本&#xff08;版本无所谓&#xff0c;随便下8.0.几都行&#xff09; 2.点击DOWNLOADS 然后&#xff0c;点击 MySQL Community…

【SOLID原则前端中的应用】开闭原则(Open/Closed Principle)- vue3示例

开闭原则&#xff08;Open/Closed Principle&#xff09;在Vue 3中的应用 开闭原则&#xff08;Open/Closed Principle&#xff0c;OCP&#xff09;规定&#xff0c;软件实体&#xff08;类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭。 也就是说&#xf…

中国植物志(80卷)

中国植物志&#xff0c;全书共80卷126分册&#xff0c;3700页&#xff0c;记载了我国301科3408属31142种植物学名、形态特征、生态环境、地理分布、经济用途和物候期等。是研究中国植物的重要论著&#xff08;截图仅部分&#xff09;。

VBA通过Range对象实现Excel的数据写入

前言 本节会介绍通过VBA中的Range对象&#xff0c;来实现Excel表格中的单元格写入、区域范围写入&#xff0c;当然也可以写入不同类型的数据&#xff0c;如数值、文本、公式&#xff0c;以及实现公式下拉自动填充的功能。 一、单元格输入数据 1.通过Value方法实现输入不同类型…

【Python】从文本字符串中提取数字、电话号码、日期、网址的方法汇总(全!)

我们在做数据清洗的时候&#xff0c;有时候会遇到将一堆文本中提取我们需要的内容&#xff0c;最常见的是&#xff0c;从一大段文本中提取出数字、电话号码、日期、网址等。而在Python中&#xff0c;正则表达式re&#xff0c;则可以满足我们从文本中提取数字、电话号码和日期等…

echarts实现3D柱状图(视觉层面)

一、第一种效果 效果图 使用步骤 完整实例&#xff0c;copy就可直接使用 <template><div :class"className" :style"{height:height,width:width}" /> </template><script>import echarts from echartsrequire(echarts/theme/…

《人人都是产品经理》:大产品

《人人都是产品经理》&#xff1a;大产品 产品之大时间之大空间之大&#xff1a;商业、产品、技术设计之大以写书为例 团队之大 回答一个问题 产品经理应该是管理者嘛&#xff1f;优点在于&#xff1a;缺点在于&#xff1a;总结&#xff1a; 如何让团队更加开心总结 产品之大 …

ChatGPT如何应用在谷歌seo?

ChatGPT在提升博客和创作效率方面非常有用。它可以帮助你快速生成吸引人的标题&#xff0c;确保内容第一眼就能抓住读者的注意力。不仅如此&#xff0c;ChatGPT还能根据你的主题生成详细的文章提纲&#xff0c;让你在写作时思路更加清晰。关键词优化也是它的强项&#xff0c;可…

hive内置函数

--查询hive的内置函数列表 show functions; --查询具体函数的使用描述 desc function extended 函数名 desc function extended current_database; 一.字符串函数 1.字符串的拆分 &#xff1a;split(); select split(hello,java;hi,bigdata,[,;]); [ ]内可以写多个分隔符 --…

【论文解读】Multiagent Multitraversal Multimodal Self-Driving: Open MARS Dataset

Open MARS Dataset 摘要引言Dataset CurationVehicle SetupData CollectionDataset Statistics Benchmark Task and ModelPlace RecognitionNeural Reconstruction Experimental ResultsVisual Place RecognitionNeural Reconstruction Opportunities and Challenges结论 摘要 …

7.2、指针变量的定义和使用

代码 #include <iostream> using namespace std; #include <string>int main() {//定义指针int a 10;//指针定义语法&#xff1a;数据类型 * 指针变量名int * p;//让指针记录变量a的地址p &a;cout << "a的地址为&#xff1a;" << &am…

恶意软件是什么意思?常见的恶意软件类型

您可能听说过很多有关恶意软件感染和运行服务器的危险的信息。但是&#xff0c;您可能还不清楚这在现实生活中意味着什么&#xff0c;或者该如何处理。让我们来了解一下&#xff1a;当人们谈论恶意软件时&#xff0c;他们真正指的是什么&#xff1f; 恶意软件是恶意软件的缩写&…

热网无线监测系统 SystemManager.asmx SQL注入漏洞复现

0x01 产品简介 热网无线监测系统是一种先进的热力管网监测解决方案,它通过无线通信技术实现对热力管网各项参数的实时监测和数据分析,以提高供热效率、降低能耗、保障管网安全。系统利用先进的传感器技术和无线通信技术,对热力管网中的温度、压力、流量等关键参数进行实时监…

【JAVA多线程】JDK中的各种锁,看这一篇就够了

目录 1.概论 1.1.实现锁的要素 1.2.阻塞队列 1.3.Lock接口和Sync类 2.各种锁 2.1.互斥锁 2.1.1.概论 2.1.2.源码 1.lock() 2.unlock() 2.2.读写锁 2.3.Condition 2.3.1.概论 2.3.2.底层实现 1.概论 1.1.实现锁的要素 JAVA中的锁都是可重入的锁&#xff0c;因为…

Google 发布了最新的开源大模型 Gemma 2,本地快速部署和体验

Gemma 2 是 Google 最新发布的开源大语言模型。它有两种规模&#xff1a;90 亿&#xff08;9B&#xff09;参数和 270 亿&#xff08;27B&#xff09;参数&#xff0c;分别具有基础&#xff08;预训练&#xff09;和指令调优版本&#xff0c;拥有 8K Tokens 的上下文长度&#…

Akamai+Noname强强联合 | API安全再加强

最近&#xff0c;Akamai正式完成了对Noname Security的收购。本文我们将向大家介绍&#xff0c;经过本次收购后&#xff0c;Akamai在保护API安全性方面的后续计划和未来愿景。 Noname Security是市场上领先的API安全供应商之一&#xff0c;此次收购将让Akamai能更好地满足日益增…

【C语言】extern 关键字

在C语言中&#xff0c;extern关键字用于声明一个变量或函数是定义在另一个文件中的。它使得在多个文件之间共享变量或函数成为可能。extern关键字常见于大型项目中&#xff0c;通常用于声明全局变量或函数&#xff0c;这些变量或函数的定义位于其他文件中。 基本用法 变量声明…

智能语音门锁:置入NV170D语音芯片ic 打造便捷生活新体验

一、智能门锁语音芯片开发背景 随着科技的飞速发展&#xff0c;传统门锁的局限性日益凸显&#xff0c;无法满足现代人对高效、安全生活的需求。在这样的时代背景下&#xff0c;智能门锁应运而生&#xff0c;它不仅继承了传统门锁的基本功能&#xff0c;更通过融入先进的科技元素…