我在做类似ACDSEE拇指框方式浏览图像时遇到问题,请指教。(200分)

  • 主题发起人 陈东海
  • 开始时间

陈东海

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现大批量图像的显示,且占用内存数量不会随着图像数量的增加而增大。
 
ACDSee显示大量图像时不会增加内存吗?
 
每次都
load一个缩小后画在画布上,free掉
 
在画布上拷一个缩略图再Free。
 
Free掉后如果由于某种原因画布需要重画,图像将无法正确显示
如再从磁盘LOAD,将导致程序效率下降,请问各位大侠如何应对。
 
为何无回应,是分数太少吗,如能解决,还有额外分数。请大侠现身!
 
可在一个画布上分割小钜形,随着图形的增多分割的矩形也越多.这样虽然图象增多了但由于
画布的大小不变,所以内存不会增加多少.
 
是否可以把你的"缩小图"保存为位图文件.
 
ACDSee显示大量图像时会增加内存,但不会一直增加
产生缩略图,将缩略图和一部分图象保存到内存,若太多
你只需要保存要显示的就行了(屏幕上要么显示一些缩略图,要么显示一张图片,对吧?)
若看的图像不在内存中再从磁盘LOAD


 
到Delphi深度历险(Vcl.vclxx.com) 去找ThumbLib的控件吧!
做得很不错的..如果要的话..我(yishaoping@citiz.net)可以发给你!
大概80K左右
 
HI,yisp
我有Thumb控件包,V1.2版,包含Thumbimage Thumbnail ThumbView 三个控件,图像
多了之后还是非常占用资源,89.2K,我想可能是因为继承了Timage控件的缘故吧,
不知是不是你所说的ThumbLib控件,如果ThumbLib无此问题(随图像增多占用系统
资源也随之增大),请发一份给我,谢谢。^^cdhzl@sina.com
 
only you 请你说清楚些,我不明白你的意思。
 
比如:你预先创建一个1024*768大小的IMAGE,然后根据要显示的图象数目,平均分割成
大小一样的矩形,在每个矩形里绘制图象。当然要根据图象的多少做适当的调整。不要使
分割的图象太小,可以设定一个上限,超过了则另生成一个IMAGE显示。在每一个矩形里
绘图可用bitblt函数。
 
lsyx,only you 的发言对我很有启发,
但尚未完全考虑清楚,
譬如:你的视窗大小为1024*768,但是如有10000幅图片,
需要1024*1200才能放下,
当滚动条下拉时,有一部分图片不在你的image中,
你是否在创建一个image呢?
请大家继续发言!!!
 
拇指缩略图显示方式是先读一张Bmp/gif/jpe到内存(1)中 --> 按缩略方式画在内存DC(2)中
(占不了多少空间) --> 清除(1) -->读第二张 …… -->窗口更新时重绘(2)。
实际的算法要复杂一些,他有一个“前进”(我自己这样叫)算法:比如先读一到十张,分别
画到(2)上,然后保存整个时间周期;如果周期太长,则减办,反之加倍(象不象TCP的流量
控制?)

微软有一个世界地图软件,显示的是栅格世界地形图(就是位图),幅面非常大,但是他可以
实现几乎无缝的平移!事实上他是不可能将整个图形都读进内存的,后来我发现在我做大范围
平移是窗口边界还是有重绘痕迹,因此推断出了上述算法。

可能讲得有点不清楚,感兴趣的话发邮件给我。
 
继续努力呀!
 
ACDSee之所以快速,其实是把已经看过的图的所略图都保存了一份.
你可以在硬盘里找Imagedb.dtf,一定是一个比较大的文件,而且随着你浏览图像数目的增加而
增大.
 
为什么没人讨论了?
 
我用vc实现了缩略图,
使用微软的listctrl控件,不需要自己绘制
用同样的方法,delphi实现肯定也没有问题,
所有缩略图的生成方式我都尝试了,这一种是最简单的
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部