王朝网络
分享
 
 
 

用vb6设计缩略图功能的图片浏览器

王朝厨房·作者佚名  2007-01-04
宽屏版  字体: |||超大  

相信每个编程爱好者都非常熟悉ACD SEE,它的缩略图察看功能和对种类繁多的图片文件的支持使它成为使用最广泛的图片浏览软件之一。现在,我们也可以轻松的设计一个具有缩略图察看功能的图片浏览器,它能够支持JPG、GIF、JPEG、BMP、WMF、DIB、ICO、CUR等格式图片文件。

(一)编程思路;

性能良好的图片浏览器首先要能够支持广泛的图片文件格式 ,这一点VB6基本控件picture已经为我们做好了。我们所要考虑的是如何将一幅图片极其清晰的按照设定大小显示到“容器”中——“容器”可以是多种多样的,而且要充分利用动态创建和卸载控件技术,以便适应不同目录所含有的不同个数的图片,当然正确、有序排列缩略图片也是非常关键的。

我在这里向大家展示利用动态创建COMMAND(按钮)控件作为载体的实现方法,它不仅可以以缩略图方式进行图片预览和全屏图片浏览,而且可以自动随窗体的变化进行相应的伸展——注意本文关于界面容器、缩略图载体容器和缩略图载体的概念。

(二)界面设计;

(1)添加四个command控件command(1——8)Style = 1 ’Graphical,caption属性分别是“选择”、“浏览”、“预览”(缩略图察看)、“上一张”、“下一张”、“向下”、“向上”、“退出”——这些按钮用来进行系统相关操作,它们是可以添加图片的;

(2)添加一个filelist控件filhidden,设置其 Pattern= "*.bmp;*.dib;*.rle;*.gif;*.jpg;*.wmf;*.emf;*.ico;*.cur",visible=fales——该文件列表控件用来读取选中目录下的所有图片文件名称,程序运行时是不可见的;

(3)添加picture控件picFrame作为界面容器;在其上面添加四个picture控件picSlide作为缩略图载体容器,picload设置autosize=true作为缓冲图片要以原格式装载图片,picThumb用来装载缩略后的图片;一个VScrollBarL控件vsbSlide——用来进行图片调整,以便在缩略图较多时能够进行相应的调整,picture1用来全屏显示图片;设置上述所有图片控件ScaleMode=3’Pixel;它们用来进行界面调整和缩略图片的生成;

(4)在缩略图载体容器picslide上面添加命令按钮command控件数组原型com(0),设置其 Style = 1 ’Graphical、Visible = 0 ;——用来作为缩略图片的载体;

(5)添加一个StatusBar控件St ——用来显示有关的信息;

(6)单击"工程"菜单项目,选择"部件",在部件对话框的"控件"栏目中选择"MICROSOFT WINDOWS COMMON CONTROLS 6.0",确认在它前面的复选框中有一个黑色的对号,单击"确认",添加对该控件的引用。添加一个progressbar控件pb——用来显示缩略图的集成进度;

(7)添加定时器timer1——用来实行图片的幻灯浏览;按层次调整上述控件到适当位置(如图片1所示);

(三)程序源代码;

Option Explicit

Dim Apath As String, Pi As Integer, bZ As Integer

.......

Private Declare Function StretchBlt Lib "GDI32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

//本函数用来对图片进行缩放处理,生成缩略图片

.......

Private Sub CreateThumbs()

//本函数用来创造缩略图片,并且将它们放到足够的

file://缩略图载体com(i)中

Dim lIdx As Long

Dim lFilCnt As Long

Dim sText As String, i As Integer

Screen.MousePointer = vbHourglass

//设置鼠标指针为漏斗类型

picSlide.Move 0, 0, Com(0).Width, Com(0).Height

picSlide.Visible = True

//初始化缩略图容器载体

Pr.Visible = True

Pr.Value = 0

Pr.Max = filHidden.ListCount

Pr.Min = 0

//启动进度条

Com(0).Picture = LoadPicture

Com(0).Visible = False

If Com.Count > 1 Then

For i = 1 To Com.Count - 1

Unload Com(i)

Next

End If

$$$AGESEP$$$

//初始化缩略图载体com

On Error Resume Next

file://忽略错误

file://lFilCnt = filHidden.ListCount

For lIdx = 0 To filHidden.ListCount - 1

Load Com(lIdx)

Com(lIdx).Caption = filHidden.List(lIdx)

Com(lIdx).Visible = True

Pr.Value = 1

Next lIdx

//创建所需要的所有缩略图载体

file://载体的个数等于选定目录下图片文件个数

Call Form_Resize

//对载体进行排序

DoEvents

For lIdx = 0 To filHidden.ListCount - 1

picLoad.Picture = LoadPicture()

picThumb.Cls

picLoad.Picture = LoadPicture(Apath & filHidden.List(lIdx))

StretchBlt picThumb.hdc, 0, 0, picThumb.Width, picThumb.Height,picLoad.hdc, 0, 0, _ picLoad.ScaleWidth, picLoad.ScaleHeight, vbSrcCopy

Set Com(lIdx).Picture = picThumb.Image

//按顺序为载体添加缩略图片

DoEvents

Pr.Value = lIdx + 1

Next lIdx

Set picLoad.Picture = LoadPicture()

Set picThumb.Picture = LoadPicture()

Pr.Visible = False

Screen.MousePointer = 0

//释放占用的资源、隐藏进度条、恢复鼠标指针

End Sub

.......

Private Sub filHidden_PathChange()

$$$AGESEP$$$

//当文件目录改变时计算出标准的目录变量

file://显示有关的目录和图片文件个数信息

file://调用缩略图创建过程函数

//......

CreateThumbs

End Sub

Private Sub Form_Resize()

file://本函数用来对程序界面控件位置进行相应的调整

file://并且调整缩略图的位置

Dim X As Long

Dim Y As Long

Dim lIdx As Long

Dim lCols As Long

If Me.WindowState <> vbMinimized Then

If Me.Width < 600 * Screen.TwipsPerPixelX Then

Me.Width = 600 * Screen.TwipsPerPixelX

ElseIf Me.Height < 378 * Screen.TwipsPerPixelY Then

Me.Height = 378 * Screen.TwipsPerPixelY

end if

//限定软件界面的最小宽度和高度

Else

picFrame.Move 2, Command1.Height, Me.ScaleWidth - 11, Me.ScaleHeight - Command1.Height - St.Height

vsbSlide.Move picFrame.ScaleWidth - vsbSlide.Width, 0, vsbSlide.Width, picFrame.ScaleHeight

lCols = Int((picFrame.ScaleWidth - vsbSlide.Width) / Com(0).Width)

For lIdx = 0 To Com.Count - 1

X = (lIdx Mod lCols) * Com(0).Width

Y = Int(lIdx / lCols) * Com(0).Height

Com(lIdx).Move X, Y

Next lIdx

picSlide.Width = lCols * Com(0).Width

picSlide.Height = Int(Com.Count /lCols)*Com(0).Height

If Int(Com.Count / lCols) < (Com.Count / lCols) Then

picSlide.Height = picSlide.Height + Com(0).Height

End If

vsbSlide.Value = 0

vsbSlide.Max = picSlide.Height - picFrame.ScaleHeight

If vsbSlide.Max < 0 Then

vsbSlide.Max = 0

vsbSlide.Enabled = False

Else

vsbSlide.Enabled = True

vsbSlide.SmallChange = Com(0).Height

vsbSlide.LargeChange = picFrame.ScaleHeight

End If

End If

Pr.Top = St.Top + 8

Pr.Left = St.Panels(4).Left + 6

Picture1.Move (picFrame.Width - Picture1.Width) / 2, (picFrame.Height - Picture1.Height) / 2

End Sub

........

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

$$$AGESEP$$$

file://如果被全屏浏览的图片较大时

file://可以用鼠标拖动图片来浏览全貌

ReleaseCapture

SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

End Sub

.......

Private Sub vsbSlide_Change()

//当缩略图较多时可以移动滑块进行浏览

picSlide.Top = -vsbSlide.Value

End Sub

(四)运行调试

本文程序展示了有关缩略图预览等的全部核心技术,至于界面、缩略图载体容器和载体可以由编程爱好者们自由发挥、改造。为了加快缩略图集成速度,大家可以考虑使用多线程内存文件映射技术——相信你很快就可以和ACD一较高下了!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有