回顾

之前博文中,曾经提到,通过计算欲显示图片和窗口控件长、宽比例,对图像本身进行放缩,再进行显示的方法。
现在看来是因为当时对dev_set_part这个算子的理解不到位造成的。
Halcon/C#混合编程实现任意图片的原始长宽比显示+形状匹配定位

之前方法的缺点

之前的方法虽然也看似完成了目标,但是需要对图片本身进行放缩处理。这就使得在UI交互时,交互得到的位置坐标需要进行换算方可对应到图像的实际像素坐标。

正确的理解思路

想像我们有一张桌子,桌子上放了一个手机,现在我们用一个相机去给手机拍照,怎样让手机看起来占图片更大一些呢?
之前的方法相当于,我们把拍照用的相机位置固定了,然后,把真实世界的手机给放缩了。
正确的思路应该是,我们去调整相机的位置,远近,使手机在相片中的位置和大小显得变化了。事实上,真实的手机是没有办法放大和缩小的。

dev_set_part

这个算子其实就相当于是你用来拍照的相机。它一共有五个输入参数,第一个是窗口控件,后面四个是取景视野在真实世界中的左上角(列、行)和右下角坐标(列、行)。

实现

基于这个算子的功能,以下例证

dev_close_window ()
dev_open_window (0, 0, 400, 480, ‘gray’, WindowHandle)
set_window_param (WindowHandle, ‘save_depth_buffer’, ‘true’)
dev_clear_window ()
dev_update_window (‘off’)
dev_open_file_dialog (‘read_image’, ‘default’, ‘default’, Selection)
read_image (Image, Selection)
get_window_extents (WindowHandle, Row, Column, winWidth, winHeight)

showPicture (Image, winWidth, winHeight)

gen_rectroi (WindowHandle, winHeight, winWidth, Row3, Column3, Phi, Length1, Length2)

以下是showPicture的内容:

set_system (‘int_zooming’, ‘false’)
get_image_size (Image, Width, Height)
picWHRatio := 1.0 * Width / Height
winWHRatio := 1.0 * winWidth / winHeight
if (Width > winWidth or Height > winHeight)
* 如果图片宽高比 大于 窗口宽高比
* 则宽度方向顶格
if (picWHRatio >= winWHRatio)
dispWidth := Width
dispHeight := Width / winWHRatio
dev_set_part (0, 0, dispHeight, dispWidth)
dev_display (Image)
endif

* 如果图片宽高比 小于 窗口宽高比
* 则高度方向顶格if (picWHRatio < winWHRatio)dispWidth := Height * winWHRatiodispHeight := Heightdev_set_part (0, 0, dispHeight, dispWidth)dev_display (Image)
endif

else
* 如果图片的长和宽都小于窗口,则以图片的原真实尺寸显示
dev_set_part (0, 0, winHeight, winWidth)
dev_display (Image)
endif
return ()

以下是gen_rectroi的内容

dev_set_colored (3)
draw_rectangle2_mod (WindowHandle, winHeight/2.0-1, winWidth/2.0-1, 0, winWidth/4.0, winHeight/4.0, Row3, Column3, Phi, Length1, Length2)
dev_set_color (‘green’)
gen_rectangle2_contour_xld (Rectangle, Row3, Column3, Phi, Length1, Length2)
dev_display (Rectangle)
dev_set_colored (3)

return ()

验证

采用一张264×245大小的图片,窗口的大小设置为400×480
则得到的显示为

在这里插入图片描述
作为对比,如果不调整显示区域,则默认填充整个窗口
在这里插入图片描述

Halcon显示正常比列长宽比的方法相关推荐

  1. android listview 列加id,Android实战开发之ListView同一个item显示2列的实现方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用List ...

  2. android 两列菜单,【Android】实战开发之ListView同一个item显示2列的实现方法(仿2列商品列表)...

    Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用ListView,然后我们可以使用百度的自定义List ...

  3. jq 控制td只显示一行_Jq通过td获取同行其它列td的方法

    假设有如下样式表结构 在制表时,采取的 手把手教你在springMVC中不用框架写表格 这篇博客里面写的制表方法,如下所示 "+objs[i].obj_Type+"+"+ ...

  4. SQL 两行两列显示一行四列或一行两列

    前言 两行两列显示一行四列 id A B 1 aaa bbb 1 ccc ddd ==>转化为 id A B A B 1 aaa bbb ccc ddd SQL 一对多转为一对一 解决 方法一 ...

  5. html表格显示列与隐藏列_在宽表上隐藏/显示HTML表格列

    html表格显示列与隐藏列 I was recently asked to create an report based on an HTML table. The report needed to ...

  6. LabVIEW 调整Table表格行高列宽的方法与例程

    LabVIEW 调整Table表格行高列宽的方法与例程 在 VI 运行时,可以用两种不同的方式更改表中的列宽度.首先,可以用鼠标更改它们:其次,可以通过属性节点编程更改它们. 手部更列表的宽度 只有在 ...

  7. Win11 桌面快捷方式未全部显示的诡异现象及解决方法

    Win11 桌面快捷方式未全部显示的诡异现象及解决方法 目录 一.现象描述 二.尝试破案 三.临时方法 四.新发现 五.简单粗暴的解决方法 六.扫尾工作 独立观察员 2023 年 1 月 5 日 一. ...

  8. GridView中BoundField类型列的改行方法

    GridView中BoundField类型列的改行方法: <asp:BoundField HeadText="A<br/>B" HtmlEncode=" ...

  9. php获取文本宽度,PHP获取一段文本显示点阵宽度和高度的方法

    PHP获取一段文本显示点阵宽度和高度的方法 本文实例讲述了PHP获取一段文本显示点阵宽度和高度的方法.分享给大家供大家参考.具体如下: define("F_SIZE", 8); d ...

最新文章

  1. Kubernetes — Helm 软件包管理工具
  2. 淘宝直播在冲刺最复杂的人工智能技术!
  3. 透明怎么弄_玻璃球里的花纹是怎么弄进去的?谜终于解开了!
  4. Codeforces 510 E. Fox And Dinner
  5. P1502 窗口的星星(扫描线入门第一题)
  6. leetcode 448. 找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)
  7. Python str内部功能介绍
  8. 在网页输入框输入角标_这个免费插件能帮我们把Excel内容快速填充到网页表单?...
  9. svn删除文件和解决冲突
  10. springboot-3-整合ehcache缓存
  11. SDN和NFV的主要区别
  12. 有哪些好用的微信群管理工具?
  13. Android设计一个app,穆易天气app设计尝试效果
  14. 信息化建设规划_统筹规划精准发力打造信息化建设新篇章
  15. 微信订阅号获取openid,然后获取用户信息
  16. 我们怎样处理垃圾网站举报?
  17. 如何写爆炸性新闻 做好自媒体
  18. 计算机专业申请phd美国,美国计算机专业博士的申请个人陈述范文
  19. 2023中兴软件类笔试
  20. 丰田生产方式(TPS)的本质

热门文章

  1. 三个显示图像的matlab函数图像,如何在matlab中将三个隐函数图像画在同一个图上...
  2. Echarts y轴高度设置(宽度铺满整个父级高度)
  3. jpress-项目升级
  4. Hexo 搭建博客提交百度 sitemap 抓取失败
  5. 一个人靠不靠谱,就看这 8 个细节
  6. Win32学习笔记 - WndProc回调函数
  7. 第二篇:读曹德旺《心若菩提》
  8. linux下安装录制视频软件Simple Screen Recorder
  9. 【Android 学习】之二维码扫描开发(闪光灯功能)
  10. 解决MainActivity.onCreate(Unknown Source)的混淆错误