背景

通常情况下,图像是填充满 HWindowControl 控件,并随其缩放的。此时只需要将 set_part 的参数设置成图像的大小即可。

不过,有时候,在一些测量任务中,我们对原始图像的长宽比敏感,此时的图像显示最好是能保持图像的长宽比不变。

正文

如何保证图像显示的长宽比例呢?答案是将 HWindowControl 控件的 ImagePart 设置成与自身控件的长宽比一致即可。这里我们假设:

图像的大小是 imgWidth 和 imgHeight

HWindowControl 控件的窗体大小是 winWidth 和 winHeight

HWindowControl 控件的 ImagePart 大小是 partWidth 和 partHeight

所以,有:

\[\frac{partWidth}{partHeight} = \frac{winWidth}{winHeight}
\]

当 winWidth < winHeight 时,我们设定 partWidth = imgWidth ,则:

\[partHeight = \frac{partWidth * winHeight}{winWidth} = \frac{imgWidth * winHeight}{winWidth}
\]

当 winWidth > winHeight 时,我们设定 partHeight = imgHeight ,则:

\[partWidth = \frac{partHeight * winWidth}{winHeight} = \frac{imgHeight * winWidth}{winHeight}
\]

C# 程序:

private void DispImage(HImage image, HWindow window)
{
int imgWidth, imgHeight, winRow, winCol, winWidth, winHeight, partWidth, partHeight;
try
{
image.GetImageSize(out imgWidth, out imgHeight);
window.GetWindowExtents(out winRow, out winCol, out winWidth, out winHeight);
if (winWidth < winHeight)
{
partWidth = imgWidth;
partHeight = imgWidth * winHeight / winWidth;
}
else
{
partWidth = imgHeight * winWidth / winHeight;
partHeight = imgHeight;
}
window.SetPart(0, 0, partHeight - 1, partWidth - 1);
window.DispImage(image);
}
catch (HalconException hEx)
{
MessageBox.Show(hEx.Message);
}
}

Halcon - 图像随 HWindowControl 控件缩放的同时,保持图像的长宽比例不变的更多相关文章

  1. Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

     Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halco ...

  2. C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件

    在使用HALCON和C#联合编程,有时候要使用halcon的HWindowControl控件,但是我发现,HWindowControl的图片显示控件,不能使用GDI+绘制ROI,不知道为什么,反正我测 ...

  3. Android调用相册拍照控件实现系统控件缩放切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.By ...

  4. Android开发ImageView控件缩放图片

    首先还是最基础的ImageView控件如何显示图片: <ImageView                Android:id="@+id/imgView"          ...

  5. Android 调用相册 拍照 实现系统控件缩放 切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...

  6. wpf在image控件上快速显示内存图像

    这是在博客园的第一篇文章 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包含图像头等信息)快速显示到界面,那么 ...

  7. 同类控件的统一操作(以TCHECKBOX为例)

    https://www.cnblogs.com/gaodu2003/archive/2008/12/15/1355355.html Procedure UnCheck; var i: integer; ...

  8. 使用listview空控件展示数据

    1.使用listview控件可以一次性的将有关的全部图像保存在控件中,建立集合图像. 图像列表控件的主要属性 属性                                           ...

  9. C# 窗体缩放的时候同步改变控件的大小和字体

    最新在写个小程序,需要窗体填满各种尺寸的显示器,同时需要同步缩放控件的大小.于是就写了个类,简单的调用一下即可解决问题. 这个类可以同步缩放控件的位置,宽度高度,字体大小. 使用的时候在FormLoa ...

随机推荐

  1. mac上完整卸载删除.简单粗暴无脑:androidstudio删除方案

    如果你是mac  ,你删除as ,删不干净也正常,你会发现安装的时候,前面的东西也在.配置文件在,会导致你以前的错误不想要的东西都在. 废话不多说,复制粘贴就是干!!!!~~~~~~~~ 第一步: 复 ...

  2. Tomcat学习笔记【2】--- Tomcat安装、环境变量配置、启动和关闭

    本文主要讲Tomcat的安装和配置. 一 Tomcat安装 1.1 下载 下载地址:http://tomcat.apache.org/ 1.2 安装 Tomcat是不需要安装的,解压压缩包即可. 在安 ...

  3. 【模板】P3806点分治1

    [模板]P3806 [模板]点分治1 很好的一道模板题,很无脑经典. 讲讲淀粉质吧,很营养,实际上,点分治是树上的分治算法.根据树的特性,树上两点的路径只有一下两种情况: 路径经过根\((*)\) 路 ...

  4. Gin Web框架简单介绍

    翻译自: https://github.com/gin-gonic/gin/blob/develop/README.md Gin Web框架 branch=master"> Gin是用 ...

  5. Spring/Java error: namespace element 'annotation-config' … on JDK 1.5 and higher

    Extract the jar file: mkdir spring cd spring jar xvf ../spring.jar Check the Spring version in META- ...

  6. SQL join中级篇--hive中 mapreduce join方法分析

    1. 概述. 本文主要介绍了mapreduce框架上如何实现两表JOIN. 2. 常见的join方法介绍 假设要进行join的数据分别来自File1和File2. 2.1 reduce side jo ...

  7. Java for LeetCode 130 Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  8. python之virtualenv 与 virtualenvwrapper 详解

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...

  9. js 事件委托 bug 修复

    下面是html 内容: <ul id="oul"> <li>1</li> <li>2</li> <li>3& ...

  10. 修改织梦DedeCms文章页默认title的方法

    <title>{dede:field.title/}_{dede:field name='typeid' runphp='yes'}$id=@me;global $dsql;$sql=&q ...