明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用vb6設計縮略圖技巧的圖片瀏覽器

[摘要]相信每個編程愛好者都非常熟悉ACD SEE,它的縮略圖察看功能和對種類繁多的圖片文件的支持使它成為使用最廣泛的圖片瀏覽軟件之一,F在,我們也可以輕松的設計一個具有縮略圖察看功能的圖片瀏覽器,它能夠支持JPG、GIF、JPEG、BMP、WMF、DIB、ICO、CUR等格式圖片文件。(一)編程思路; ...
相信每個編程愛好者都非常熟悉ACD SEE,它的縮略圖察看功能和對種類繁多的圖片文件的支持使它成為使用最廣泛的圖片瀏覽軟件之一,F在,我們也可以輕松的設計一個具有縮略圖察看功能的圖片瀏覽器,它能夠支持JPG、GIF、JPEG、BMP、WMF、DIB、ICO、CUR等格式圖片文件。

(一)編程思路;

  性能良好的圖片瀏覽器首先要能夠支持廣泛的圖片文件格式 ,這一點VB6基本控件picture已經為我們做好了。我們所要考慮的是如何將一幅圖片極其清晰的按照設定大小顯示到“容器”中——“容器”可以是多種多樣的,而且要充分利用動態(tài)創(chuàng)建和卸載控件技術,以便適應不同目錄所含有的不同個數的圖片,當然正確、有序排列縮略圖片也是非常關鍵的。

  我在這里向大家展示利用動態(tài)創(chuàng)建COMMAND(按鈕)控件作為載體的實現方法,它不僅可以以縮略圖方式進行圖片預覽和全屏圖片瀏覽,而且可以自動隨窗體的變化進行相應的伸展——注意本文關于界面容器、縮略圖載體容器和縮略圖載體的概念。

(二)界面設計;

 。1)添加四個command控件command(1——8)Style = 1 ’Graphical,caption屬性分別是“選擇”、“瀏覽”、“預覽”(縮略圖察看)、“上一張”、“下一張”、“向下”、“向上”、“退出”——這些按鈕用來進行系統(tǒng)相關操作,它們是可以添加圖片的;

 。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()

//本函數用來創(chuàng)造縮略圖片,并且將它們放到足夠的

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

//創(chuàng)建所需要的所有縮略圖載體

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://調用縮略圖創(chuàng)建過程函數

//......

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

(四)運行調試

  本文程序展示了有關縮略圖預覽等的全部核心技術,至于界面、縮略圖載體容器和載體可以由編程愛好者們自由發(fā)揮、改造。為了加快縮略圖集成速度,大家可以考慮使用多線程內存文件映射技術——相信你很快就可以和ACD一較高下了!