[MFC] 将像素坐标点缩放,准确的画在所在控件的图片上

简介: [MFC] 将像素坐标点缩放,准确的画在所在控件的图片上

描述:将点画在图片时候,当点比较大的时候,需要将图片所在的控件放大,才能显示在图片上,而且显示的位置也不对,没改一次图片大小,画的点就会换一次位置,原因是坐标是相对于图片的像素大小而言的,也就是像素坐标。要想在mfc控件上显示准确的坐标,一种方法是将控件放大到和图片像素大小一下(显然不靠谱),而另一种方法就需要将坐标进行一个缩放了。

缩放的原理:

只需要将图片坐标系转换成控件坐标系即可,可通过公式控件宽/图片宽=x“/x=y”/y, 即可求出缩放后的坐标(x“,y”),而图片宽,控件宽能求,(x,y)已知。

代码(根据点坐标,在图片上画点):

//获取控件尺寸和位置
  CRect rectCtrl;
  CStatic *p = (CStatic*)GetDlgItem(IDC_STATIC3);
  //p->MoveWindow(100, 100, 100, 100);//更改控件大小并移动其到指定位置
  p->GetWindowRect(rectCtrl);
  this->ScreenToClient(rectCtrl);
  //GetDlgItem(IDC_STATIC_TEST)->GetClientRect(rectCtrl);
  int width =  rectCtrl.Width();
  int height =  rectCtrl.Height();
  OnBnClickedButton1();
  //获取图片尺寸(pic为图片的类型)
    int cx = pic.GetWidth();
    int cy = pic.GetHeight();
    //开始画
  OnBnClickedButton2();
  CDC *pDC = m_pic.GetWindowDC();
  CPen pen(PS_SOLID,4,RGB(255,0,0));
  pDC->SelectObject(&pen);
  //point.x ==col
  //point.y ==row
  int i=0;
  int j=0;
  for(;i<5,j<5;i++,j++)
  {
  //将halcon类型的坐标转换成double类型,画点
  double ti = hv_MatchingCol[i].D(); 
  double tj = hv_MatchingRow[j].D();
  //主要转换过程
  pDC->Ellipse((ti/cx)*width,(tj/cy)*height,(ti/cx)*width+1,(tj/cy)*height+1);
  }

效果:

目录
相关文章
|
7月前
|
数据采集 前端开发 关系型数据库
MyEMS 开源能源管理系统:安装部署、常见问题与未来趋势
MyEMS 是一款灵活、低成本的开源能源管理系统,适用于各类能源监控场景。本文详解其在 Ubuntu 系统下的安装部署流程,涵盖环境准备、数据库配置、前后端部署及设备接入,并解析使用中常见问题的排查与优化方案,助力企业高效落地能源数字化管理,同时展望其未来发展趋势与创新方向。
428 0
|
缓存 Linux
centos yum的配置文件 repo文件详解
什么是repo文件?repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!YUM的工作原理并不复杂,每一个 RPM软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装 哪些基础软件。
2907 0
|
Web App开发 数据可视化 前端开发
前端数据可视化插件(四)关系图
前端数据可视化插件(四)关系图
前端数据可视化插件(四)关系图
|
设计模式 前端开发 调度
前端必须掌握的设计模式——工厂模式
工厂模式是一种创建型设计模式,通过工厂媒介提供统一接口来创建对象,客户端只需告知创建需求,具体逻辑由工厂处理。工厂模式分为简单工厂、标准工厂和抽象工厂,分别适用于不同场景下的对象创建需求。简单工厂利用静态方法创建对象,标准工厂通过具体工厂类减少耦合,抽象工厂则用于创建一系列相关或依赖对象的家族。
前端必须掌握的设计模式——工厂模式
|
编译器 开发工具 C语言
配置C++的学习环境
这篇教程介绍了学习C++语言所需的环境配置和软件选择。首先,你需要一个文本编辑器(如Visual Studio Code、Visual Studio、Vim、Emacs或Eclipse)和一个C++编译器(如GCC)。在不同操作系统上安装GCC的方法包括:在Linux或UNIX上使用命令行检查或安装GCC,在Mac OS X上通过Apple的Xcode,而在Windows上则需要安装MinGW。教程还提供了使用Visual Studio创建和编译C++程序的步骤。最后,文章简述了g++编译器的使用及其常用命令选项。
539 0
|
存储 区块链 数据安全/隐私保护
web3.0学习路径
Web3是指下一代互联网的演进形式,它涉及一系列技术和理念,旨在实现去中心化、开放、透明和用户主导的互联网体验。Web3的目标是赋予用户更多的控制权和数据所有权,并通过区块链、加密货币和分布式技术来实现。
499 2
VS代码对齐工具使用教程
本文是关于VS代码对齐工具的使用教程,包括工具下载、使用文档、使用实例和对齐结果展示。文章介绍了如何使用该工具进行字符串对齐,提供了快捷键操作和正则表达式对齐方法,并展示了对齐前后的代码对比。
996 0
VS代码对齐工具使用教程
|
C++
Halcon 学习笔记九:MFC+halcon联合
Halcon 学习笔记九:MFC+halcon联合
812 0
计算机网络——物理层-编码与调制(数字基带信号、模拟基带信号、码元、常用编码、基本调制方法、混合调制)二
计算机网络——物理层-编码与调制(数字基带信号、模拟基带信号、码元、常用编码、基本调制方法、混合调制)二
432 0
|
Java
Java中 String与基本数据类型,包装类,char[],byte[]之间的转换
Java中 String与基本数据类型,包装类,char[],byte[]之间的转换
479 0

热门文章

最新文章

下一篇
开通oss服务