捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
超快缩图预览控件 TfastpicPreview
关键字:缩图,预览,控件,delphi 7, 资料库连结
来 自:转载,http://delphi.ktop.com.tw/board.php?cid=30&fid=74&tid=99299
平 台:Win2k/XP/NT,Win2003,Vista 下载所需:0 火柴
深浅度:中级 完成时间:2009/9/24
发布者:hikor 发布时间:2009/9/25
编辑器:DELPHI7 语  种:简体中文
分 类:图形 下载浏览:2035/14506
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
图海浮沉录

最近需要一个展示图片的元件,网上乱google了一下,发现都不是很满意,后来试了下jedi中的 jvThumbView 等二个元件,在效能及操控上都不令人满意,所以决定自己来造轮子。
问题是自己对图形方面不是很了解(哈,其实是各方面都不很了解),所以就在ktop 这搜了一下,算是颇有收获,其中像是 redsnow 版大在某帖上所说的,很有启发性。
依着该思路实作,一方面加入 graphicEx 组件,以增加可处理的图片格式,一方面针对 jpg 用TJPEGImage作优化处理。
另外在显示方面则利用listview + imageList.

感觉就要大功告成时,却发现listview 变成了 flash view, 闪动的很厉害。可是在站上看到有人介绍一个用 vc 实作的 Thumbnails Viewer using ListCtrl  一点都不会闪动,图片很cool的一张一张翻开更新。检视一下他用的物件也是windows 的 ListCtrl + imagelist,实作代码叫用的api与自己的是一样的。奇了?那有用vc表现极佳的代码,用delphi 就变成垃圾?抱着一个不信邪的精神,终于谜底揭晓,原来不是因为delphi不好,而是因为delphi太好了。
这话怎么说?
因为vcl 封装的很好,所以每次 ImageList 新增或取代一个image时,就通知使用它的元件,例如 listview。每次listview 收到通知(ImageListChange),就叫 SetImageList ,然后 ListView_SetImageList 然后windows 系统就重绘整个 listview.这是好事,省却我们去处理这些相关的变动。
但是当同时大量新增image时,大量的整个listview重绘,就会导致画面闪动。

处理方法 : 继承 ImageList ,覆载 change. 加入一行  if FDoNoChange then exit; 如此在大量新增时,将 FDoNoChange设为true即可。

看着程式以高速而优雅的姿态展示着图片,就如同过去delphi起始界面上高雅的智慧女神像,内心不仅升起一股感动。正沉浸于这美好的时光,一个所有程式作者熟到不能再熟的画面出现了 !!! "错误讯息"! 什么?怎么可能,这一定是图档本身的问题,自己如是的安慰自己。经过一翻确认发现果然 TJPEGImage 就无法显示该图片,嘿嘿连 graphicEx 也报错,有了这两个权威元件的判决书,于是又重拾回美好的心情,可以打包收工了。

.....咦! 该死的 ms档案总管,豪不留情而大剌剌的将该缩图刺进了我的眼睛,显然ms就是有办法处理,这又将我重打入网海乱估(咕? google)的轮回。

gdi plus ? 一眼瞧见了它。加了个plus,还是ms的东西。试试吧。一经测试,马上惊为天人,不但该问题.jpg不再是问题, 连另一个问题 .tift档( graphicEx会报错 )也悠然显现。不仅如此,其处理速度也很快。实测了一下,以jpeg格式来说,graphicEx元件由于不作任何优化处理所以会慢上数倍(当然如果深入其核心,也许可以做优化设定,毕竟source code 都是现成的),TJPEGImage元件如果依redshow前辈的口诀设定,速度很快,而gdi plus 不做任何设定时,速度已经就和TJPEGImage 一样快,哇,那设定一下还得了?找了一下,发现无处可设。大概ms认为你想得到优化手法,它都想得到而且 "加"进去了,这 gdi plus 当中 "plus" 的头衔果然不是浪得虚名。

经过了这样一番周折,至此算是大事底定,小功告成了。下面作个总结。

总结:在 delphi下,免费的图形资源中,以 gdi plus + graphicEx 算是完美组合了。一般常见的图形格式如jpg,tif,png,bmp,就用gdi plus 快速处理,其他的格式就交给 graphicEx处理。如此也就不需要各别的TJPEGImage 等元件了。
缺点: 这两组在处理上叫用的方法不同,需要加以封装才会好用。

图形显示部份用大家都已熟悉的 listview + imageList。

图形应用部份应该要能轻易与 shell treeview 及 资料库 dataset 等元件结合,因为这是最常见的图形储存模式。

最后实作出的元件 TfastPicPreview,  有兴趣的朋友可下载试看看。
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论13条 当前显示最后6条评论
youcheng 2009/9/26 11:38:36
用的是哪个GDIPLUS包?能否提供一下?
up08 2009/9/26 15:22:40
来自台湾的朋友的多多支持
smt44 2009/10/21 22:56:59
支持分享
the_o 2010/3/22 0:48:11
感谢作者提供这么好的文章。可了后很有感触!
seanyzhou 2010/4/23 23:48:47
ai, 这个包打的, 不就能把用到的gdi plus和graphicEx一块打包进去吗, 用都用不了
q1q1q1 2011/8/12 10:17:25
hikor:看了你写的FastPicPreview很受启发,但是我用DBISAM数据库显示JPG的图像时就显不了了(用了两种图像格式:BLOB和Graphic),不知道是什么原因,我看了你的说明你加了gdi plus好像又支持JPG,但是为什么我有测试时都出问题呢?出现两个问题一个是不显图像,另一个是出现提示窗:do something here... 显示EDatabaseError with message 'Missing table name'   这个是能是我用DBISAM数据的兼容问题。希望你能帮我解决这问题。
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2012 V3.01 沪ICP备05001939号 更新RSS列表