图像处理软件包括但不限于:
图片浏览器,2D地图浏览器、图片编辑器等软件。

为了处理大分辨率图片,一般采用GDAL加载图像,GDAL可以动态加载图像的一部分,可以建立图像金字塔,优化加载速度。

一般的图像处理软件都需要对加载的图像进行放大、缩小、平移操作。首先明确:

  • 放大是指图像细节增加,可见范围减少的一种浏览方式。英文名:Zoom In。
  • 缩小是指图像细节减少,可见范围增加的一种浏览方式。英文名:Zoom Out。

实现

下面介绍如何实现。
编写代码前,需要建立图像浏览所使用的数学模型。如下图所示:

其中,显示窗口是指用于绘制当前浏览内容的窗口,观察区域是指,当前显示窗口中的内容对应于原图中内容的范围。二者之间必须满足:显示窗口的长宽比和观察区域的长宽比相同,单位为像素。

利用上述模型,就可以编写对应的代码了:

  • 图像加载显示:使用GDAL在原图中以观察区域矩形为范围参数,读取原图中对应的像素数据,输出大小为显示窗口的大小;
  • 放大浏览:显示窗口大小不变,缩小观察区域。观察区域缩小的中心点可以根据需求来设置;
  • 缩小浏览:显示窗口大小不变,放大观察区域。观察区域放大的中心点可以根据需求来设置;
  • 平移浏览:显示窗口大小不变,观察区域大小不变,但是根据鼠标拖动的偏移量修改观察区域的位置。

同样可以方便的计算出所谓的缩放比例了,即

缩放比例 = 显示窗口的宽 / 观察区域的宽 = 显示窗口的长 / 观察区域的长
长度单位:像素

Zoom In、Zoom Out的解释

我们知道Z轴是垂直于电脑屏幕的,指向屏幕面前的人的方向为外,指向屏幕内部的方向为内。
所以,Zoom In是指人靠近屏幕去看屏幕上的内容,显然是一种细节增加、范围减少的放大操作。
Zoom Out是指人远离屏幕去看屏幕上的内容,这是一种细节减少。范围增加的缩小操作。

结语

除了文中介绍了实现方案外,还有其他方案。比如将观察区域始终设置为和图像相同大小,固定不变,通过改变显示窗口,正确地说应该是改变绘制缓存的大小来实现放大缩小。但是可以推断,对于加载大图来说,如果在这种情况下缩小图片,或占用内存过大,或申请不到内存,速度上也会变慢。

使用文中介绍的方案,如何实现图像旋转的需求呢?这个就留给读者思考自己思考了。


最近创建了一个公众号,主要是Qt相关。如果您觉得文章有用,可以关注一下。

【GUI开发】图像处理类软件的浏览功能实现模型相关推荐

  1. 【开发管理类软件必备知识视频教程之二】登录窗体后台注意事项

    通宵制作,走火入魔通用权限管理视频讲解(娱乐大家.给生活加点儿料) 第二次录视频希望大家能谅解.通宵折腾折腾出了5部视频,都上传好了,给大家分享一下,不足之处请大家指点. C# ASP.NET走火入魔 ...

  2. 教育类app系统软件定制开发多少钱?需要哪些功能?

    教育类app系统软件定制开发多少钱?需要哪些功能? 随着时代的发展,传统教育培训机构在移动互联网冲击下,很多企业都开始转型定制开发教育类APP软件,尤其2020年受疫情影响很多线下教育培训机构纷纷倒闭 ...

  3. 客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析

    原生开发应用开发 Microsoft阵营的 Winform WinForm是·Net开发平台中对Windows Form的一种称谓. 如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样 ...

  4. [荐][转]为何应该使用 MacOS X(论GUI环境下开发人员对软件的配置与重用)...

    一周前我和 Tinyfool 闲聊苹果操作系统,都认为对于开发人员来说,苹 果操作系统(MacOS)是上佳的选择.Tinyfool 笔头很快,当即就写了一篇 长文章,我则笔头很慢,今天才全部码好.他的 ...

  5. 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】

    十一休假,杭州西湖边逛了一圈只能用人山人海来形容,浙大紫金港校区也逛了一圈风景如画,建设得真不错很棒,假期就去了这2个地方,然后在家里陪老婆.看孩子.洗尿布.打了几局星际争霸,在网上接了一个B/S架构 ...

  6. 开发股票类的金融软件需要哪些知识?

    @开发股票类的金融软件需要哪些知识呢? 如果是做BS开发的话.一般需要java web相关技术. 一般的学习顺序为:html,javascript,servlet,jsp,还有主流的ssh框架. Ja ...

  7. 开发视频直播软件需要注重哪些功能?

    视频直播给人们的日常生活带来了极大的改变,因此,开发一款视频直播类APP软件,设计的基础是用户的需求,前沿市场信息等.那么,开发视频直播软件需要注重哪些功能呢?下面就跟着摩杜云小杜一起来看看吧! 开发 ...

  8. 医院类软件开发公司有哪些北京

    医院类软件开发公司有哪些北京 1 北京华盛恒辉软件开发公司 2 北京五木恒润科技有限公司 3 北京做软件致电壹伍扒壹壹叁叁泗柒泗泗公司 4 航天信息股份有限公司 5 北电网络nortel 6 北京朗新 ...

  9. 用Tkinter打造GUI开发工具(23)软件窗口皮肤

    @用Tkinter打造GUI开发工具(23)软件窗口皮肤 用Tkinter打造GUI开发工具(23)软件窗口皮肤 Tkinter 是 Python 的标准 GUI 库,它是一个跨平台的脚本图形界面接口 ...

最新文章

  1. 一种解决启动进程传递参数过长的方法
  2. C++中如何定义某个数组的引用?
  3. 螺丝孔槽中的螺丝拧花了的物理原理分析
  4. Deeplab 在Qt Creator下编译报错undefined reference to Mat_xxx
  5. awk嵌套awk_与AWK一起喝咖啡
  6. 怎么能避免浏览器请求超时_浏览器请求服务器超时
  7. thinkphp 5.0 模块设计
  8. 多年前,初始架构:php+mysql下,对网站架构方面的一些认识
  9. 局域网文件传输工具---LANDrop 使用记录
  10. bootstrap datepicker 在bootstrap modal中不显示问题
  11. android studio拼音转汉字,汉字转拼音,TinyPinyin、Pinyin4j与JPinyin哪个库更快
  12. xss之CSP bypass
  13. 服务器选云主机还是VPS主机呢?
  14. 华为服务器电源性能指标,华为服务器可服务性设计介绍-电源篇.PDF
  15. 高等数学(第七版)同济大学 习题12-4 个人解答
  16. 操作系统-IO与零拷贝【万字文,比较详细的解析】
  17. H.265/HEVC视频编码标准总结
  18. ES 7.6.2集群迁移(从一套ES集群迁移数据到另一套集群)
  19. 计算机组成原理_主存与CPU的连接
  20. 读《VR虚拟现实与AR增强现实的技术原理与商业应用》

热门文章

  1. 如何:创建公钥/私钥对
  2. SCRUM 12.03
  3. ASP.NET站点跨子域名单点登陆(SSO)的实现
  4. [转]Win7 系统安装VS2008没反应 点击安装一闪就没有反应 .
  5. 把东西从学校搬回来了
  6. 树莓派4b装系统_树莓派4B初次使用--系统安装|配置
  7. python中主函数循环,带有菜单函数的Python主函数循环不起作用?
  8. 微星刀锋 无法进入bios_夏天来了 微星主板风扇转速调节攻略
  9. Java设计模式笔记(4)模版方法模式
  10. UML类图与类间六种关系表示