APP下载

基于多线程的图片快速预览方法的设计与实现

2017-03-21杜琳

电脑知识与技术 2016年33期
关键词:多线程

杜琳

摘要:随着计算机技术的发展,电子图片数据已经成为人们传递信息的主要媒介,其规模和数量均呈现爆炸式的增长。如何在大量图片集合中快速预览便成了急需解决的问题。该文提出了一种基于多线程的图片快速预览方法,通过采用为原始图片构造缩略图,和实时监测缩略图缓存与智能成像预测处理,既保证图片预览中用户对于图片质量的要求,也保证了图片预览过程中的平滑性和流畅性。

关键词:图片预览;多线程;快速预览;图片成像;图片缓存

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)33-0078-02

Abstract: With the development of computer technology, electronic picture data has become the main medium for people to transmit information, and the scale and quantity of them have exploded. How to quickly preview in a large collection of pictures has become an urgent need to solve the problem. This paper presents a fast preview method based on multi-thread. By constructing thumbnails for the original pictures and real-time monitoring of thumbnail caching and intelligent image prediction processing, it not only ensures the quality of pictures in the preview, but also ensures the Smoothness and fluency in picture preview.

Key words: picture preview; multi-thread; quick preview; image imaging; picture cache

随着网络技术和Internet的发展,电子图片数据已经成为计算机及其他信息存储介质中的重要组成部分,特别是近来便携设备、智能终端的普及,家庭图片总量和类型呈现爆炸式的增长。据统计,现今图像以及视频等多媒体资源已经超过了网络中各类信息的四分之一。图像由于能够直观地反映出丰富而有趣的信息,成为了当今信息传播中的热门媒介,因此,如何在大量图片集合中快速预览便成了急需解决的问题。目前市面上的一些软件,在百级数量上的图片预览效果尚可,一旦达到千级或以上数量级的图片集合时,成像以及预览的速度都大打折扣,不能满足用户快速预览的要求。

由于图片的快速预览有着很高的实用性以及潜在商业价值,因此受到了研究人员的广泛关注。就连windows操作系统也在一代又一代的系统更新中不断强化着预览功能的性能,可当同一文件夹下图片数量达到上千、上万甚至更多,其预览功能就出现了明显的“迟钝感”,图片的成像需要较长的等待时间才可完成。孔繁庭[1]提出了目前主流的数字图像处理技术,用以提高大规模图片处理时的性能,为实时图像处理提供了一个解决途径;李燃等[2]介绍了自主开发了一套图像系统,解决了图像浏览技术方面的一些问题,但缺乏对大规模的图片集合处理的论述与实践;李洁[3]采用了多线程的方法展示了多媒体信息,但方法单一,不足以满足性能的要求。李平等[4]改进了IOS开发包中UIScrollView类实现了预览大量图片,降低内存消耗的方法,由于依赖了特定开发包,并不通用。本文提出了一种通用的基于多线程的图片快速预览方法,通过采用为原始图片构造缩略图,和实时监测缩略图缓存与智能成像预测处理,既保证图片预览中用户对于图片质量的要求,也保证了图片预览过程中的平滑性和流畅性。

1 基本原理

1.1 多线程图片成像

用户能够看到图片,首先需要图片的成像。由于图片成像的速度很大程度取决于原始图片的大小,原始图片越小,成像绘制越快,原始图片越大,成像越慢,CPU、内存等资源耗费也越多。因此,用尺寸较小的缩略图代替原始图片进行预览成像,可以提高图片预览的速度。同时生成的缩略图可重用,除首次预览需要构造原始图片的缩略图,之后的预览操作都将复用已有缩略图,以加快图片预览。基于用户对图片预览的普遍需求和目前市面上大量软件应用的尺寸选择,本文采用了两种尺寸为原始图片构造缩略图,并由不同的线程分别处理,以加快效率。

1)75像素的迷你尺寸,线程1负责生成;

2)600像素的大尺寸图像分辨率,线程2负责生成。

以上尺寸均为图像同比例缩放后最长边单位,以达到图片预览对展示时间和图像质量的要求。

在成像尺寸的选择上,使用以下规则:

1)默认使用迷你尺寸缩略图填充图片预览框,保证用户在最短时间内看到成像;

2)若默认的图片预览框大于迷你尺寸,或在用户有放大展示的需求(选择大尺寸预览)时,变换为相应大尺寸图像的缩略图填充,以保证图片的清晰度;

3)在缩略图的构造过程中,赋予其不同优先级调度,保证迷你尺寸的图片预览形式优先完成。

1.2 实时监测图片缓存

当预览图片的集合达到上千、上万甚至更多时,图片的成像操作将占据大量的内存,在内存总量有限的情况下,可用内存越少,将会严重的制约图片的成像速度,如何释放冗余的内存占用将决定着图片预览的流畅性和平滑性。本文提出对缩略图成像缓存进行实时检测,以保证内存占用控制在一定范围,同时根据预测用户下一步的操作,选择释放冗余内存。因此,在用户滚动鼠标或滑块,改变视窗,查看更多图片时,应采用:

1)对已成像图片缓存进行记录,保证后期新图片的缩略图生成有足够空间,线程3负责;

2)当界面存在多个带滑块的预览视区,每个预览视区内展示的图片集合即称为一个图片目录逻辑树。各视区独立计算自身目录逻辑树的图片成像和释放方法。在计算的过程中,需要进行当前视区矩形与预测视窗矩形的比对。其中当前视区矩形是指用户当前在屏幕上预览的图片集合的矩形窗口。预测视窗矩形是根据一定的规则(包括用户习惯,图片相邻距离等因素综合考虑),推测用户即将预览的图片集合,并以目前视窗中图片尺寸排列的样式计算出展示这些图片集合需要的矩形窗口。比对规则如下:

①计算当前视区矩形与预测视窗矩形的差集,若预测视窗矩形中不含当前视区矩形中的元素即为可能需要成像的图片,即可优先为其成像。线程4负责。

②已成像图像若不在两视窗矩形的差集中,需释放其资源。线程5负责。

其中,线程4调度级别高于线程5,以保证图像生成的处理时间。

2 图片快速预览系统实现

基于上述方法,本文使用C#语言编程实现了一个图片快速预览系统,如下图所示。在用户查看图片和滚动滑动块进一步预览时,可快速成像图片,避免了预览过程的“迟钝感”,提高了图片预览的效率。

3 结束语

本文采用多线程并行工作的方式,实现图片的快速预览,一方面保证了图片成像的速度和质量,另一方面也考虑到系统内存的优化处理,保证图片预览过程中的操作流畅性和平滑性,在实际应用中有着一定的指导作用。

参考文献:

[1] 孔繁庭. 数字图像处理技术的现状及发展方向研究[J]. 电子制作, 2015(3).

[2] 李燃, 吴晓艳. 基于市场需求的win8图片浏览系统的设计与实现[J]. 品牌:下半月,2015(7).

[3] 李洁. 数字化校园多媒体信息管理系统的设计与实现[D]. 成都: 电子科技大学, 2013.

[4] 李平, 鄒振宇. 苹果iOS中滚动视图类(UIScrollView)的循环以及动态加载图片的算法[J]. 电脑与电信, 2011(10).

猜你喜欢

多线程
Java多线程同步机制在网络售票系统中的应用
Java并发工具包对并发编程的优化