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

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

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

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

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

实现

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

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

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

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

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

Zoom In、Zoom Out的解释

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

结语

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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动事务_JDBC进阶(二)事务编程

一、事务简介事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务具有ACID特性:原子性(Atomicity) —— 原子性是指事务是一个不可分割的工作单位&#xff0c…

【精华】详解Qt中的内存管理机制

前言 内存管理,是对软件中内存资源的分配与释放进行有效管理的方法和理论。 众所周知,内存管理是软件开发的一个重要的内容。软件规模越大,内存管理可能出现的问题越多。如果像C语言一样手动地管理内存,一会给开发人员带来巨大的…

【转】2.1【MySQL】运行原理(一):查询sql的执行过程及MySQL架构分析

MySQL的发展历史和版本分支: 时间里程碑1996 年MySQL1.0 发布。它的历史可以追溯到 1979 年,作者 Monty 用 BASIC 设计的一个报表工具。1996 年 10 月3.11.1 发布。MySQL 没有 2.x 版本。2000 年ISAM 升级成 MyISAM 引擎。MySQL 开源。2003 年MySQL4.0 …

【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析

前一篇讲完了查询流程,我们是不是再讲讲更新流程、插入流程和删除流程?在数据库里面,我们说的update操作其实包括了更新、插入和删除。如果大家有看过MyBatis的源码,应该知道Executor里面也只有doQuery()和doUpdate()的方法&#…

【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构

MySQL的存储结构分为5级:表空间、段、簇、页、行。 1.表空间 TableSpace 上篇【MySQL】从InnoDB的内存结构、磁盘结构到update sql执行过程分析 在磁盘结构部分就说过了,表空间可以看做是InnoDB 存储引擎逻辑结构的最高层,所有的数据都存放在…

【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)

MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log&…

python 读中文乱码_python字符乱码的解决小结

引言无论学习什么程序语言,字符串这种数据类型总是着有非常重要。然而最近在学习python这门语言,想要显示中文,总是出现各种乱码。于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可以正常显…

ntnub原理怎么看_老电工由浅入深带你入门学PLC的工作原理和梯形图的编程规则...

PLC编程怎么学?很难吗?工控小白怎么入门学习PLC?需要为学习PLC编程做哪些准备?学习PLC编程时,前期一定要积累相关的理论知识,有了一定的基础,基础打扎实之后就是多练习了。今天推荐的重点&#…

【转】国密加密算法SM系列的C#实现方法

http://www.zhimengzhe.com/bianchengjiaocheng/Javabiancheng/22144.html 在网上搜索SM实现方法,按照上面网站提供方法总是出错,经过调试终于修改好了,给大家以参考,不走弯路了 base64修改,这个看需求,如…

1盒子刷webpad_拉宽带送的盒子也有春天:一招解放各种束缚限制

序言:故事要从一年多前开始说起了,话说...装了宽带之后,移动送了个电视盒子,一次未使用,角落吃灰一年多了,最近有个大胆的想法!其实是被逼迫无奈,孩子总是喜欢拿我手机刷抖音&#x…

php udp发送和接收_63、php利用原生socket创建udp服务

1、案例函数汇总2、案例通过socket创建udp服务,获取对端的ip和port信息。并进行打印2.1、udp服务源码/*** Copyright(C) Iamasb* project : 3、workerman相关知识点* explain : 原生socket创建创建udp服务* filename : socket_udp.php* author : Iamasb*/// 创建udp…

【转】C#实现SM3国密加密

C#实现SM3国密加密 本文主要讲解“国密加密算法”SM系列之SM3的C#实现方法,加密规则请详阅国密局发布的文档。 首先需第三方Nuget包:Portable.BouncyCastle (源码来自http://www.bouncycastle.org/csharp/) 1.1常规处理 /// &l…

mq集群要建传输队列吗_面试官:消息队列这些我必问!

作者:mousycodersegmentfault.com/a/1190000021054802消息队列连环炮项目里怎么样使用 MQ 的?为什么要使用消息队列?消息队列有什么优点和缺点?kafka,activemq,rabbitmq,rocketmq 都有什么去呗?如何保证消息队列高可用…

【转】国密算法sm4 CBC模式加解密

一.什么是CBC模式? CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起。 在CBC模式中,首先将明文分组与前一个密文分组进行异或运算&#xff0c…

【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

版权声明:本文为作者原创,如需转载,请注明出处https://blog.csdn.net/weixin_42940826注:以下图片来自于《图解密码学》,这本书讲的更全面细致,建议阅读,在我资源库中有此书,还有使用…

中发生数据丢失_如何防止Redis脑裂导致数据丢失?

所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。而且,严重的话&a…

【转】TransactionScope事务简介

在.NET 1.0/1.1 版本我们使用SqlTransaction.处理事务 string connString ConfigurationManager.ConnectionStrings["db"].ConnectionString; using (var conn new SqlConnection(connString)) { conn.Open(); using (IDbTransaction tran conn.BeginTransact…

网络通道数2的倍数_限流笔记-通道限流(二)

在工作中的时候,由于我负责的一个系统需要调用很多的第3方的系统,可是呢,这些个第3方的系统的性能完全不一致,有的好有的坏,还成本都不一样,当然了平时把,直接使用成本低的就行了,但…

mysql题目_MySQL练习题

创建下列表并创建相关约束问题1:查询出成绩表,而且student_id 后面要有对应的学生名,course_id 后面要有对应的课程名.1 SELECT2 score.sid,3 score.student_id,4 student.sname,5 score.course_id,6 course.cname,7 score.number8 FROM scor…

查看mysql数据库的死锁日志_【MySQL】mysql死锁以及死锁日志分析

1.死锁的概念死锁:死锁一般是事务相互等待对方资源,最后形成环路造成的。对于死锁,数据库处理方法:牺牲一个连接,保证另外一个连接成功执行。发生死锁会返回ERROR:1213 错误提示,大部分的死锁In…