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

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

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

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

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

实现

下面介绍如何实现。
编写代码前,需要建立图像浏览所使用的数学模型。如下图所示:
在这里插入图片描述
其中,显示窗口是指用于绘制当前浏览内容的窗口,观察区域是指,当前显示窗口中的内容对应于原图中内容的范围。二者之间必须满足:显示窗口的长宽比和观察区域的长宽比相同,单位为像素。

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

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

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

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

Zoom In、Zoom Out的解释

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

结语

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

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


最近创建了一个公众号,主要是Qt相关。如果您觉得文章有用,可以关注一下。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撬动未来的支点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值