【GUI开发】图像处理类软件的浏览功能实现模型
图像处理软件包括但不限于:
图片浏览器,2D地图浏览器、图片编辑器等软件。
为了处理大分辨率图片,一般采用GDAL加载图像,GDAL可以动态加载图像的一部分,可以建立图像金字塔,优化加载速度。
一般的图像处理软件都需要对加载的图像进行放大、缩小、平移操作。首先明确:
- 放大是指图像细节增加,可见范围减少的一种浏览方式。英文名:Zoom In。
- 缩小是指图像细节减少,可见范围增加的一种浏览方式。英文名:Zoom Out。
实现
下面介绍如何实现。
编写代码前,需要建立图像浏览所使用的数学模型。如下图所示:
其中,显示窗口是指用于绘制当前浏览内容的窗口,观察区域是指,当前显示窗口中的内容对应于原图中内容的范围。二者之间必须满足:显示窗口的长宽比和观察区域的长宽比相同,单位为像素。
利用上述模型,就可以编写对应的代码了:
- 图像加载显示:使用GDAL在原图中以观察区域矩形为范围参数,读取原图中对应的像素数据,输出大小为显示窗口的大小;
- 放大浏览:显示窗口大小不变,缩小观察区域。观察区域缩小的中心点可以根据需求来设置;
- 缩小浏览:显示窗口大小不变,放大观察区域。观察区域放大的中心点可以根据需求来设置;
- 平移浏览:显示窗口大小不变,观察区域大小不变,但是根据鼠标拖动的偏移量修改观察区域的位置。
同样可以方便的计算出所谓的缩放比例了,即
缩放比例 = 显示窗口的宽 / 观察区域的宽 = 显示窗口的长 / 观察区域的长
长度单位:像素
Zoom In、Zoom Out的解释
我们知道Z轴是垂直于电脑屏幕的,指向屏幕面前的人的方向为外,指向屏幕内部的方向为内。
所以,Zoom In是指人靠近屏幕去看屏幕上的内容,显然是一种细节增加、范围减少的放大操作。
Zoom Out是指人远离屏幕去看屏幕上的内容,这是一种细节减少。范围增加的缩小操作。
结语
除了文中介绍了实现方案外,还有其他方案。比如将观察区域始终设置为和图像相同大小,固定不变,通过改变显示窗口,正确地说应该是改变绘制缓存的大小来实现放大缩小。但是可以推断,对于加载大图来说,如果在这种情况下缩小图片,或占用内存过大,或申请不到内存,速度上也会变慢。
使用文中介绍的方案,如何实现图像旋转的需求呢?这个就留给读者思考自己思考了。
最近创建了一个公众号,主要是Qt相关。如果您觉得文章有用,可以关注一下。
【GUI开发】图像处理类软件的浏览功能实现模型相关推荐
- 【开发管理类软件必备知识视频教程之二】登录窗体后台注意事项
通宵制作,走火入魔通用权限管理视频讲解(娱乐大家.给生活加点儿料) 第二次录视频希望大家能谅解.通宵折腾折腾出了5部视频,都上传好了,给大家分享一下,不足之处请大家指点. C# ASP.NET走火入魔 ...
- 教育类app系统软件定制开发多少钱?需要哪些功能?
教育类app系统软件定制开发多少钱?需要哪些功能? 随着时代的发展,传统教育培训机构在移动互联网冲击下,很多企业都开始转型定制开发教育类APP软件,尤其2020年受疫情影响很多线下教育培训机构纷纷倒闭 ...
- 客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析
原生开发应用开发 Microsoft阵营的 Winform WinForm是·Net开发平台中对Windows Form的一种称谓. 如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样 ...
- [荐][转]为何应该使用 MacOS X(论GUI环境下开发人员对软件的配置与重用)...
一周前我和 Tinyfool 闲聊苹果操作系统,都认为对于开发人员来说,苹 果操作系统(MacOS)是上佳的选择.Tinyfool 笔头很快,当即就写了一篇 长文章,我则笔头很慢,今天才全部码好.他的 ...
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
十一休假,杭州西湖边逛了一圈只能用人山人海来形容,浙大紫金港校区也逛了一圈风景如画,建设得真不错很棒,假期就去了这2个地方,然后在家里陪老婆.看孩子.洗尿布.打了几局星际争霸,在网上接了一个B/S架构 ...
- 开发股票类的金融软件需要哪些知识?
@开发股票类的金融软件需要哪些知识呢? 如果是做BS开发的话.一般需要java web相关技术. 一般的学习顺序为:html,javascript,servlet,jsp,还有主流的ssh框架. Ja ...
- 开发视频直播软件需要注重哪些功能?
视频直播给人们的日常生活带来了极大的改变,因此,开发一款视频直播类APP软件,设计的基础是用户的需求,前沿市场信息等.那么,开发视频直播软件需要注重哪些功能呢?下面就跟着摩杜云小杜一起来看看吧! 开发 ...
- 医院类软件开发公司有哪些北京
医院类软件开发公司有哪些北京 1 北京华盛恒辉软件开发公司 2 北京五木恒润科技有限公司 3 北京做软件致电壹伍扒壹壹叁叁泗柒泗泗公司 4 航天信息股份有限公司 5 北电网络nortel 6 北京朗新 ...
- 用Tkinter打造GUI开发工具(23)软件窗口皮肤
@用Tkinter打造GUI开发工具(23)软件窗口皮肤 用Tkinter打造GUI开发工具(23)软件窗口皮肤 Tkinter 是 Python 的标准 GUI 库,它是一个跨平台的脚本图形界面接口 ...
最新文章
- 一种解决启动进程传递参数过长的方法
- C++中如何定义某个数组的引用?
- 螺丝孔槽中的螺丝拧花了的物理原理分析
- Deeplab 在Qt Creator下编译报错undefined reference to Mat_xxx
- awk嵌套awk_与AWK一起喝咖啡
- 怎么能避免浏览器请求超时_浏览器请求服务器超时
- thinkphp 5.0 模块设计
- 多年前,初始架构:php+mysql下,对网站架构方面的一些认识
- 局域网文件传输工具---LANDrop 使用记录
- bootstrap datepicker 在bootstrap modal中不显示问题
- android studio拼音转汉字,汉字转拼音,TinyPinyin、Pinyin4j与JPinyin哪个库更快
- xss之CSP bypass
- 服务器选云主机还是VPS主机呢?
- 华为服务器电源性能指标,华为服务器可服务性设计介绍-电源篇.PDF
- 高等数学(第七版)同济大学 习题12-4 个人解答
- 操作系统-IO与零拷贝【万字文,比较详细的解析】
- H.265/HEVC视频编码标准总结
- ES 7.6.2集群迁移(从一套ES集群迁移数据到另一套集群)
- 计算机组成原理_主存与CPU的连接
- 读《VR虚拟现实与AR增强现实的技术原理与商业应用》