发明内容
本发明的目的是提供一种实现QT预览大尺寸图片的方法、装置及相关组件,旨在解决现有大分辨率图片在加载预览后会占用较大的内存的问题。
为解决上述技术问题,本发明的目的是通过以下技术方案实现的:提供一种实现QT预览大尺寸图片的方法,其包括:
加载图片文件数据至内存对象;
对所述图片文件数据执行网格处理步骤,使所述图片文件数据被分割成多个子图片文件数据,并生成对应的项目对象;
将所有所述项目对象加入视图场景中,并按照顺序进行排列;
若接收到输入的控制指令,则判断各项目对象是否在所述视图场景的显示区域内,若当前项目对象在所述视图场景的显示区域内,则判定当前所述项目对象为目标项目对象,并对所述目标项目对象执行坐标转换步骤,以得到对应的屏幕显示区域,并基于所述屏幕显示区域进行图片显示。
另外,本发明要解决的技术问题是还在于提供一种实现QT预览大尺寸图片的装置,其包括:
加载单元,用于加载图片文件数据至内存对象;
网格处理单元,用于对所述图片文件数据执行网格处理步骤,使所述图片文件数据被分割成多个子图片文件数据,并生成对应的项目对象;
排序单元,用于将所有所述项目对象加入视图场景中,并按照顺序进行排列;
显示处理单元,用于若接收到输入的控制指令,则判断各项目对象是否在所述视图场景的显示区域内,若当前项目对象在所述视图场景的显示区域内,则判定当前所述项目对象为目标项目对象,并对所述目标项目对象执行坐标转换步骤,以得到对应的屏幕显示区域,并基于所述屏幕显示区域进行图片显示。
另外,本发明实施例又提供了一种计算机设备,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的实现QT预览大尺寸图片的方法。
另外,本发明实施例还提供了一种计算机可读存储介质,其中所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行上述第一方面所述的实现QT预览大尺寸图片的方法。
本发明实施例公开了一种实现QT预览大尺寸图片的方法、装置及相关组件,其中,方法包括:加载图片文件数据至内存对象;对所述图片文件数据执行网格处理步骤,使所述图片文件数据被分割成多个子图片文件数据,并生成对应的项目对象;将所有所述项目对象加入视图场景中,并按照顺序进行排列;若接收到输入的控制指令,则判断各项目对象是否在所述视图场景的显示区域内,若当前项目对象在所述视图场景的显示区域内,则判定当前所述项目对象为目标项目对象,并对所述目标项目对象执行坐标转换步骤,以得到对应的屏幕显示区域,并基于所述屏幕显示区域进行图片显示。该方法能够快速把大分辨率的图片切割成小块的子图片文件数据,且利用Qt的视图场景框架有效的将大分辨率的图片文件数据切割成为小块的子图片文件数据并进行管理,从而实现大分辨率图片浏览的各项功能例如缩放、移动等。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
需要补充的是:图形视图框架提供了一个基于图形项的模型视图编程方法,主要由场景、视图和图形项三部分组成,这三部分分别由QGraphicsScene、QGraphicsView和QGraphicsItem这三个类来表示,其中,多个视图可以查看一个场景,场景中包含各种各样几何形状的图形项。
请参阅图1,图1为本发明实施例提供的实现QT预览大尺寸图片的方法的流程示意图;
如图1所示,该方法包括步骤S101~S105。
S101、加载图片文件数据至内存对象;
S102、对所述图片文件数据执行网格处理步骤,使所述图片文件数据被分割成多个子图片文件数据,并生成对应的项目对象;
S103、将所有所述项目对象加入视图场景中,并按照顺序进行排列;
S104、若接收到输入的控制指令,则判断各项目对象是否在所述视图场景的显示区域内,若当前项目对象在所述视图场景的显示区域内,则执行步骤S105;
S105、判定当前所述项目对象为目标项目对象,并对所述目标项目对象执行坐标转换步骤,以得到对应的屏幕显示区域,并进入下一步骤S106;
S106、基于所述屏幕显示区域进行图片显示。
在本实施例中,基于用户对目标图片的选择后,首先加载目标图片对应的图片文件数据,并保存至内存对象中,由于加载的是图片文件数据而不是图片对象数据,所以占用的内存相对小很多,然后对整个图片文件数据进行网格划分,例如一个10000*10000分辨率的图片文件数据,按照10*10的网格进行划分,则可以得到100个1000*1000的子图片文件数据,然后基于得到的子图片文件数据生成对应的项目对象,即生成100个项目对象;然后将这100个项目对象加入到视图场景中,并且按照位置顺序对各项目对象进行排列。
基于用户对该目标图片进行放大或缩小或移动的控制指令,对这100个项目对象进行判断,具体的,判断各项目对象是否在视图场景的显示区域内,例如其中有60个项目对象位于视图场景的显示区域内,则将这60个项目对象命名为目标项目对象,然后对每一目标项目对象执行坐标转换步骤,得到对应的屏幕显示区域,最后根据屏幕显示区域进行图片显示。
需要说明的是,对于非目标项目对象则不做显示渲染,因此不会耗费内存,也就是说,剩下的40个项目对象为非目标项目对象,在图片显示的时候,不会对这部分非目标项目对象进行渲染操作。
总的来说,本申请基于用户对目标图片输入的缩放大小数值,对目标项目对象包含的子图片文件数据进行缩放处理后构造出合适的图片进行显示,这部分内存占用大小与显示区域的大小相关,超出屏幕的项目对象不会被渲染,所以整个10*10的网格图片最大显示内存损耗为屏幕尺寸大小的2倍数。
具体一实施例中,所述步骤S101包括以下步骤:
S10、利用文件管理器读取图片文件数据中的二进制数据,并将所述二进制数据存储至字节数组对象。
在本实施例中,利用文件管理器(QFile)读取图片文件数据中的二进制数据,并将该二进制数据保存至字节数组对象(QByteArray对象)中,后续可以根据用户输入的控制指令对该二进制数据进行快速缩放或移动处理。
具体一实施例中,所述步骤S102中的“网格处理步骤”包括以下步骤:
S20、基于预设的切割大小规则,从所述图片文件数据中读取n*m尺寸的子图片文件数据,并将所有的所述子图片文件数据存储至哈希表;
S21、在所述哈希表对应的网格坐标下生成对应的项目对象;
S22、根据所述哈希表中的网格坐标,将各所述字图片文件数据与对应的所述项目对象进行关联。
在本实施例中,针对不同分辨率的图片,可以预先设置不同的切割大小规则,以对各图片起到较好的网格划分效果,其中,例如对10000*10000分辨率的图片文件数据,按照10*10的网格进行划分,而对于6000*4000分辨率的图片文件数据,可以设置按照6*4的网格进行划分,也就是说,本申请不对步骤S20中的n和m数值以及两者之间的大小做具体限定,可以根据实际情况做相应设置。
将切割出来的各子图片文件数据都存储在一张哈希表(ImageItemGridTbl)里,同时对应网格下标生成对应的项目对象(ImageItem对象),例如从图片文件数据中读取10*10小块的子图片文件数据,然后将这10*10小块的子图片文件数据存储至哈希表里,然后对应网格下标生成10*10个项目对象,需要说明的是,项目对象是根据分割出来的小块子图片文件数据生成的,然后被缓存起来,下次又有新的小块子图片文件数据可以再次复用。
在得到项目对象后,按照按哈希表中的下标,将10*10个小块子图片文件数据与对应的项目对象关联,以方便后期项目对象进行渲染照片时调用对应的子图片文件数据,更进一步的,把哈希表ImageItemGridTbl的key索引用下列各式建立与项目对象的联系QHash<Qpair<quint32,quint32>,ImageItem*>。
具体一实施例中,所述步骤S20包括以下步骤:
S201、利用QImageReader类中的setScaledSize从所述图片文件数据读取n*m尺寸的子图片文件数据。
在本实施例中,利用QImageReader类中的setScaledSize函数从图片文件数据读取子图片文件数据。
具体一实施例中,所述步骤S104中“若接收到输入的控制指令,则判断各项目对象是否在所述视图场景的显示区域内”包括以下步骤:
S30、将各所述项目对象在图形坐标系下的图形坐标分别转换为在视图坐标系下的视图坐标;
S31、判断各所述项目对象的视图坐标是否在所述视图场景的显示区域内。
在本实施例中,视图场景框架具有3个坐标系,一个是视图(view)坐标系即看到的窗口;一个是场景(The Scene)坐标系,就是窗口所显示的内容:最后一个是图形项(Item)的坐标系,每一项目对象ImageItem就是一个Item,故本申请将各项目对象ImageItem在图形坐标系下的图形坐标换算为view坐标后就可以判断出该项目对象是否在视图场景的显示区域内。
如果项目对象不在视图场景的显示区域内则不对这部分项目对象进行渲染,故不会耗费内存。
具体一实施例中,所述步骤S104中“坐标转换步骤”包括以下步骤:
S40、将各所述目标项目对象在所述视图坐标系下的视图坐标转换为在场景坐标系下的场景坐标,得到对应的屏幕显示区域。
在本实施例中,如果项目对象即目标项目对象在视图场景的显示区域内,则对每一目标项目对象在视图坐标系下的视图坐标转换为在场景坐标系下的场景坐标,求出该目标项目对象的屏幕显示区域。
具体一实施例中,所述步骤S106包括以下步骤:
S50、根据所述屏幕显示区域,获取所述目标项目对象所关联的子图片文件数;
S51、基于输入的控制指令,对所述子图片文件数据进行对应操作。
在本实施例中,根据对目标项目对象求出的屏幕显示区域大小,读取该目标项目对象关联的图片瓦片数据(子图片文件数据)进行快速缩放转换或移动,也就是说,通过这种方式产生的图片对象内存占用就和显示区域的大小有关,因此可以看出当进行缩放显示时,整个渲染过程最多产生2倍于屏幕分辨率大小的图片对象,需要说明的是,因为本申请使用哈希表的缓存,所以最多产生2倍于屏幕分辨率大小的图片对象。
本申请的方法能够快速把大分辨率的图片切割成小块的子图片文件数据,且利用Qt的视图场景框架有效的将大分辨率的图片文件数据切割成为小块的子图片文件数据并进行管理,从而实现大分辨率图片浏览的各项功能例如缩放、移动等。
本发明实施例还提供一种实现QT预览大尺寸图片的装置,该实现QT预览大尺寸图片的装置用于执行前述实现QT预览大尺寸图片的方法的任一实施例。具体地,请参阅图2,图2是本发明实施例提供的实现QT预览大尺寸图片的装置的示意性框图。
如图2所示,实现QT预览大尺寸图片的装置600,包括:
加载单元601,用于加载图片文件数据至内存对象;
网格处理单元602,用于对所述图片文件数据执行网格处理步骤,使所述图片文件数据被分割成多个子图片文件数据,并生成对应的项目对象;
排序单元603,用于将所有所述项目对象加入视图场景中,并按照顺序进行排列;
显示处理单元604,用于若接收到输入的控制指令,则判断各项目对象是否在所述视图场景的显示区域内,若当前项目对象在所述视图场景的显示区域内,则判定当前所述项目对象为目标项目对象,并对所述目标项目对象执行坐标转换步骤,以得到对应的屏幕显示区域,并基于所述屏幕显示区域进行图片显示。
该装置能够快速把大分辨率的图片切割成小块的子图片文件数据,且利用Qt的视图场景框架有效的将大分辨率的图片文件数据切割成为小块的子图片文件数据并进行管理,从而实现大分辨率图片浏览的各项功能例如缩放、移动等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
上述实现QT预览大尺寸图片的装置可以实现为计算机程序的形式,该计算机程序可以在如图3所示的计算机设备上运行。
请参阅图3,图3是本发明实施例提供的计算机设备的示意性框图。该计算机设备1100是服务器,服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。
参阅图3,该计算机设备1100包括通过系统总线1101连接的处理器1102、存储器和网络接口1105,其中,存储器可以包括非易失性存储介质1103和内存储器1104。
该非易失性存储介质1103可存储操作系统11031和计算机程序11032。该计算机程序11032被执行时,可使得处理器1102执行实现QT预览大尺寸图片的方法。
该处理器1102用于提供计算和控制能力,支撑整个计算机设备1100的运行。
该内存储器1104为非易失性存储介质1103中的计算机程序11032的运行提供环境,该计算机程序11032被处理器1102执行时,可使得处理器1102执行实现QT预览大尺寸图片的方法。
该网络接口1105用于进行网络通信,如提供数据信息的传输等。本领域技术人员可以理解,图3中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备1100的限定,具体的计算机设备1100可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域技术人员可以理解,图3中示出的计算机设备的实施例并不构成对计算机设备具体构成的限定,在其他实施例中,计算机设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,计算机设备可以仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图3所示实施例一致,在此不再赘述。
应当理解,在本发明实施例中,处理器1102可以是中央处理单元(CentralProcessing Unit,CPU),该处理器1102还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
在本发明的另一实施例中提供计算机可读存储介质。该计算机可读存储介质可以为非易失性的计算机可读存储介质。该计算机可读存储介质存储有计算机程序,其中计算机程序被处理器执行时实现本发明实施例的实现QT预览大尺寸图片的方法。
所述存储介质为实体的、非瞬时性的存储介质,例如可以是U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的实体存储介质。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。