Delphi编程实现图片缩略图预览功能

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Image【i】.Stretch:=FaIse: //如果图片小于image的大小则以图片的实际大小显示 ImgName【i】.Caption:=FiIelist.St rjngsfi一1】;
ImgNameBak【il.Caption:=ImgName【i】.Captjon: ImgName【i J.VisJble:=FaIse: //显示图片名,保证图片名“居中” if(i>=1)and(i<=5)then
Vjsible:=True: Width:=104:
BackGroud『
Height:=118:
//动态创建BackGroud,作为放置缩略图和图片名的背景
mage【
=Tlmage.Create(seIf)
mageI magef
Parent:=BackGroudfi】 Visible:=True:
magef Stretch:=True:
begin lmgNameBak【i】.Free:
ImgNameBak…:=n¨:
end:
if Assigned《BackGroud【i】)then begin
BackGroud【i】.Free:
BackGroudIi】:=ni|:
end: end:
end:
procedure TForml.ShowImage:
ImgNameBak【i 1.0nCIick:=ScrolIBoxl,OnCIick: ImgN8meBak【l J.OnDbICIick:=Scrol旧o×1。0nDbICIick: Image【m OnMouseMove:=Scro辩Boxl.OnMouseMove: Image….OnCIick:=Scro惦oXl.On cIlcb fmage….OnDbiCIick:=ScrofIBoxl.OnDbfC}ick: if(ImagefI】.Picture.Width<98)and(Image【i】. Picture.Heiqht<98)then
在工程中定义两个私有过程(procedure): showImage和
Cleadmage,分别用来显示缩略图和清空缩略图。实现的核心
代码如下:
procedure TForm 1.CIearImage:
Var
i:jntegerj begin
if imgcount>=1 then for i:=1 to imgcount do begin
BackGroud【i1.Left:=BackGroud【i一1】.Left+108:
Image【i】.Top:=3:
Image【{】.Left:z 3:
Image“】.V{s|bIe:=True:
end: end eIse begin
k:=Trunc(}/5): if((i mod(k}5))=1)then begin
萝…………………………………………………………”
实用第一/智慧密集
;;…。…,;…;。。…。,…。……;。。,。。。。,。,,;…,;。,;。;。。。。…。。…。,
|。j强整露;囊鏊鬻骥霪鋈镶鏊l鬣螽囊毳*蘩%鎏|甏骜鏊蘩豢謦§罄。。:|?誊嚣囊誊j藿l誊一二:。
碴|冀豢麓鸶藏甏颤t赣隧渗i戮攀鬻笺薹l『;)|I≤
mage【 magef
Center:=True:
Width:=98:
mage【 Hejght:=98:
万方数据
龟黼醺嚣≥量粪燮≯ 毫毖稿程技巧与雏护≮=羔要.。
箩…………………………………………………………5
实用第一/智慧密集
//动态创建Timage,用来存放缩略图 lmgN8meBak【i】:=TPaneI.Create(se|f》:
j毒攀i誊i||誊
≮毒豢:?浚《鬻蘩≯薯:o|尊赣麓蘩;姚蹇|ij蘩二
摘要 关键词
本文用Delphi面向对象的方法实现了BMP、JPG、ICO等格式图片的缩略图和简单 的图片预览功能。 缩略图,BMP,JPG
一、引言
目前图片浏览器软件很多,大部分软件都有图片缩略图预 览功能,如在AcDsee中点击相应的浏览文件夹,其下的图片 缩略图就会一幅幅的展现出来,双击图片缩略图即可放大浏 览。Delphi作为面向对象的快速应用程序开发工具,不但有强 大的数据库开发功能,还能做到快速开发图形、图像类的应用 软件。
Gaugel.F0reCOIOr:=cIBIue:
Gauge 1.BackCoIor:=c旧Iack:
Gaugel.Progress:=i: Path:=She||TreeViewl.Path+’\7 一1 l: //设置文件路径
+FileList.St rIngs【
Image【i】.Picture.LoadFromFile(Path): fmgNameBak{l】OnMouseMove:=ScrollBoxl. OnMouseMove:
Var
I.j,k:Integer:
begin CIearImage: imgcount:=fiIeIist.count; fori:=1 tOimgcOunt dO
begin BackGroud}
=TPaneI.Create(self)
BackGroud I Parent:=Scro||Boxl:
BackGroud{ BackGroud f
ImgNameBak【il.Parent:=BackGroud【j】: ImgNameBak f i】.BevelOuter:=bvLowered:
lmgNameBakfil.Font.Size:=9:
ImgNameBak【i l.Font.Color:=clBlue: ImgNameBaklil.Width:=100:
“PageDown”键浏览下一张图片,设置如图4所示。
图3控件放置图
图4 Fo丌n2窗体设置 因为在某一文件夹下的图片数量不一,所以显示图片缩略 图只能是动态创建。本程序以某一文件夹下有不超过1000张 图片为例,创建四个数组对象。在此工程中定义全局变量和解 释如下:
Var
Image:array【O..1000】of TImage: //存放缩略图 ImgName:array(O..1 OOO】of TLabe|: //用来存放图片名 BackGroud:array f O..1 000】of丁PaneI: //放置缩略图和图片名的背景 ImgNameBak:array【O..1 OOO】of TPanel: //用来作为imgname的背景 ImgPos,NamPOs, imgcount:integer: //缩略图的位置和图片数量 Path:stmg://记录当前图片所在的路径 剐elist:TStringList://记录当前路径下的所有图片名
“PageDown”键能实现浏览上一张和下一张图片。具体的程序

截图如图1和图2所示。
图l图片缩略图预览
图2双击图片后的效果
三、程序实现
新建Delphi工程,在F0珊1上放置三个名为Panell、Pan— e12、Panel3的Panel组件和一个Splitter(放置在Panel2左边) 控件,Align属性分别设置为alkft、alclient、alButtom、 alLeft。在PaIlell组件上自上而下放置Panel4、shellTreeviewl、 Splitter2、PaIlel5、Imagel组件,其中ShellTreeviewl用来显示 电脑中文件夹,Imagel用来显示点击缩略图时提供图像的预 览。PaIlel4和Panel5的c印tion属性分别是“选择浏览文件 夹”和“图片浏览”,其余相关位置属性根据实际情况设置。 在Panel2上放置一个scmllbox组件,A1咖属性设置为al— client,showHint属性设为1’me,图片的缩略图都在这个组件 上“画”出来,并且鼠标放在上面有图片信息提示。在Panel3 上放置一个Gauge组件,用来显示加载图片缩略图的进度;放 置一个Panel组件,用来显示有多少张图片。具体的位置见图
jf k=1 then BackGfoud{¨。ToD:=130
else
BackGroud【i】.Top:=120术k+12: BacI(Groud【i】.Left:=8: ImagefiJ.1bp:=3: Im89e¨】.Left:=3: lmage【I】.Visible:=True: end eIse begin BackGfoud【i】.Top:=BackGroud【i一1】.Top: BackGroud【j】.Left:=BackGroud【j一1 1.Left十108: lmage【il.Top:=3: Image【i1.Left:=3: Image【m Vls.bIe:=True: end: end: ImgNameBak【i】.Top:=Image【i】.Top十101: ImgNameBakfi】.Left:=1: end: pane|6.Caption:=’一共有’+inttost…mgcount)+7张图 片’ end:
程序中用ShellTreeviewl来显示电脑中的所有文件夹。程
序运行时单击文件夹即能实现该文件夹下所有图片的缩略图预
览,所以设计时首先得查找所选文件夹下的图片并把这些文件
名保存到变量Filelist(为Tstringlist类)中。组件shellTree— viewl的0nclick事件代码如下: procedure TForml.She¨TreeViewl Click(Sender:TO Nhomakorabeaject):
二、程序简介
选择程序中左边的文件夹,如果该文件夹下有BMP、JPG 或IC0图片文件,右边的空白处以每行五张一幅幅展现出该图 片的缩略图,并在图片缩略图的下方显示其文件名,程序界面 的最下方显示加载图片的进度和该文件夹下图片的总数。当鼠 标放置在缩略图上时提示该图片的大小和文件名,单击该缩略 图,左下方提供预览功能,双击时能在新窗体中提供该图片的 放大浏览,并且在此窗体中按键盘的“Pageup”和
ff Assigned(hage…)then
begin Image【i】.Free: Image【i1:=州:
end:
if Assigned(ImgNamefl】)then begin
lmgName【{1.Free: lmgName【I】:=niI: end: if Assigned(ImgName8ak【i】)then
Var
sr:TSea『chRec:
begin FiIelist.CIear: if(FindFirst(sheIItreevlewl.path+’\术.木’,faAnyFiIe.sr) =0)then
begin reOeat If(UpperCase(eXtractfiIeext《sr.Name))=7.JPG’)or (UpperCase(eXtractfi|eeXt(sr.Name))=7.ICO’)or 《UpperCase(extractfjlee)(t(sr.Name))=7.BMP’)or 《UpperCase(eXtractf孙eext(sr.Name))=’.JPEG’) then flleIjst.Add(sr.Name):
begin
if{i=1)then
begin BackGroud….丁op:=8:
BackGroudfi】.Left:=8:
Imagefi】.Top:=3:
Image【I】Left:=3: lmage【m Visible:=Tfue: end:
汗(i>=2)and(i<=5)then
begin
BackGroudIi】.Top:=BackGroud【i一1】.Top:
3。
再在工程中新建一个窗体FoHn2,放置一个Image组件。 程序运行时,在Fo瑚1的图片缩略图上双击某一缩略图,即打 开窗体FoⅡn2,用来放大浏览该图片。并且实现当前目录下图 片的上下翻动,按键盘的“Pageup”浏览上一张图片,按
渤淼与基护 万方数据
BR^PHlCS&B^啊EPRDBB^啊……一一………t一*一…。*,……。,。…………。.,一。…………,…。…………。。……,。。。
ImgNameBakIil.Helght:=12: //动态创建ImgNameBak,用来作为imgname的背景
ImgName【iI:=TL8beI..Create(seIf): ImgName f.J Parent:=ImgNameBak【m ImgNamefi J.Font.CoIor:=cIBIue: ImgNamefil.Width:=100: //动态创建JmgName,用来存放图片名 GauGel.MaxValue:=file“st.count:
相关文档
最新文档