六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

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

VB完成窗口圖像縮放、滾動技巧

[摘要]Visual Basic是Windows平臺中最常用的應用軟件開發語言,窗口圖像縮放、滾動是圖像處理、多媒體數據庫等應用軟件開發中的基本功能。本文將介紹如何用VB5.0實現地窗口圖像縮放和滾動技巧,供讀者在各種語言系統開發中參考。一、獲取圖像本文所介紹的圖像縮放并沒有對真正的圖像進行縮放,而是復制...
Visual Basic是Windows平臺中最常用的應用軟件開發語言,窗口圖像縮放、滾動是圖像處理、多媒體數據庫等應用軟件開發中的基本功能。本文將介紹如何用VB5.0實現地窗口圖像縮放和滾動技巧,供讀者在各種語言系統開發中參考。

一、獲取圖像

本文所介紹的圖像縮放并沒有對真正的圖像進行縮放,而是復制一幅窗口圖像的真實畫面,對這個窗口圖像附本進行局部縮放和滾動,獲取窗口圖像可使用Windows的API函數來實現。具體來說,實現窗口圖像縮放、滾動需要用GetDeskTopWindow()函數獲取桌面窗口句柄,再通過GetDC()函數轉換為描述表句柄,則用BitBlt()函數把桌面圖像復制到任意圖形容器控件中,桌面圖像復制完成后,再用ReleaseDC釋放窗口描述表,各API函數的具體使用方法參見本文的例子程序。

本文所用的API函數包含在WIN95/98的GDI32.DLL和USER32.DLL動態鏈接庫中,在使用時可通過VB5.0的TExt VIEWER復制到所開發的應用程序中。

二、圖像縮放

圖像縮放顯示的基本原理就是把原圖像的一部分縮放后再送入窗口的圖形容器控件中,在VB中可用內部命令PaintPicture來進行,語法格式為:
    PaintPicture Pic,DestX,DestY,DestWidth,DestHeight,ScrX,ScrY,ScrWidth,ScrHeight
    其中,Pic為圖片對象,如圖形控件對象等;
    DestX,DestY為目標圖像起始坐標;
    DestWidth,DestHeight為目標圖像幅面尺寸;
    ScrX,ScrY為源圖像起始坐標;
    ScrWidth,ScrHeight為源圖像剪裁尺寸。

該命令就是把一個源圖像資源任意復制到指定的區域,其功能相當于API函數的BitBlt,但使用更簡單,若復制時改變源圖像的ScrWidth,ScrHeight或目標圖像的DestWidth,DestHeight可使復制后的圖像尺寸發生變化,實現窗口圖像的縮放顯示。若ScrWidth,ScrHeight或DestWidth,DestHeight為負值還可實現窗口圖像的水平、垂直反轉顯示。因此,在把源圖像送入目標圖形容器控件時,若改變源圖像的幅面尺寸,即可實現圖像的縮放處理。

三、圖像滾動

當載入圖像尺寸大于圖形控件窗口時,為了便于瀏覽、選取必須對窗口圖像滾動操作。窗口圖像滾動可通過水平滾動控件HScroll和垂直滾動控件VScroll來實現,通過控件的改變值HScroll.Value和VScroll.Value來控制PaintPicture命令中的源圖像坐標ScrX和ScrY,即可實現窗口圖像的滾動操作。

四、圖像縮放、滾動實現

本文可對非壓縮BMP位圖進行縮放、滾動,非壓縮BMP位圖的寬度和高度在文件開始11H后的8個字節。若讀者需要對其它圖像格式(如jpg,TIF等)進行縮放操作,可根據本文介紹的方法對找出相應的圖像高度和寬度即可,具體實現步驟如下:

1.執行“File-->Projects”創建一新項目APPIMG.VBP,在FORM窗口中創建PictureBox、CommandButton、HScroll、VScroll等對象,調整各自位置,并設置各對象的屬性如下:
    Form: Name=AppImage,ScaleMode=1
    PictureBox: Name=ImageWin,Appearance=1-3D,ScaleMode=3
    CommandButton: Name=ZoomIn,Caption="ZoomIn"
    CommandButton: Name=ZoomOut,Caption="ZoomOut"
    CommandButton: Name=ExitButton,Caption="Exit"

2.雙擊FORM窗口,并將下面程序輸入到Form對象的Load事件中。該程序用于讀取圖像的寬度和高度,初始化常用參數,載入窗口圖像,并將圖像復制到FORM窗口的PictureBox圖形控件容器中顯示。
    Private Sub Form_Load()
        Dim FileName As String
        FileName="C:\SAMP.BMP"
        Open FileName For Binary As #1
        Get #1,19,ImageWidth:Get#1,,ImageHeight        '讀取位圖的寬度和高度
        Close #1
        DW=15*ImageWidth-ImageWin.Width           '將像點轉換為Twip(微點)
        DH=15*ImageHeight-ImageWin.Height
        ImageWin.Width=15*ImageWidth
        ImageWin.Height=15*ImageHeight
        AppImage.Autoredraw=True
        AppImage.Caption=FileName           '改變Form窗標題
        HScroll1.SmallChange=100            '設置滾動最小步距
        VScroll1.SmallChange=100
        DX=ImageWin.Width:DY=ImageWin.Height            '設置復制圖像尺寸
        SX=ImageWin.Width:SY=ImageWin.Height
        AMP=1'設置縮放比例為1
        sWin=GetDesktopWindow()                    '獲取桌面窗口句柄
        sDC=GetDC(sWin)                                    '轉換為描述表句柄
        hd=BitBlt(ImageWin.hdc,0,0,Image.Width,Image.Height,sDC,0,0,&HCC0020)
        hd=ReleaseDC(sWin,sDC)                    '釋放窗口描述表
        AppImage.ImageWin=LoadPicture(FileName)            '載入圖像顯示
End Sub

3.在General對象的Declaration過程中聲明本程序所使用的WIN95 API函數和和過程,以及各事件程序所使用的全局變量等。
    Private Declare Function BitBlt Lib "gdi32"(ByVal hDestDC 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 dwRop As Long) As Long
Private Declare Function GetDC Lib "user32"(ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32"() As Long
Private Declare Function ReleaseDC Lib "user32"(ByVal hwnd As Long,ByVal hdc As Long) As Long
Dim sWin,sDC,hd
Dim ImageWidth As Long,ImageHeight As Long
Dim DX,DY,SX,SY,PX,PY,DW,DH,MX,MY,X0,Y0,AMP

4.雙擊ImageWin對象,并在MouseMove事件和Mousedown事件中輸入下面程序,用于窗口圖形的拖動滾動處理。
Private Sub ImageWin_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
If (Button and vbLeftButton)>0 Then
'拖動鼠標滾動圖像
MX=HScroll1.Value+(X-X0)
MY=VScroll1.Value+(Y-Y0)
If MX>0 and MX<HScroll1.Max Then HScroll1.Value=MX
If MY>0 and MY<VScroll1.Max Then VScroll1.Value=MY
End If
End Sub
Private Sub ImageWin_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)
X0=X:Y0=Y'拖動鼠標初值
End Sub

5.在ZoomIn控件和ZoomOut的Click事件中輸入下列程序,對窗口圖像進行放大、縮小處理。
Private Sub ZoonIn_Click()
If AMP<5 Then AMP=2*AMP
'放大系數小于5,則放大圖像
AppImage.ImageWin.PaintPicture ImageWin.Image,0,0,AMP*DX,AMP*DY,PX,PY,SX,SY
End Sub
Private Sub ZoomOut_Click()
AppImage.ImageWin.Cls
'清除窗口圖像
If AMP>0.25 Then AMP=AMP/2
'放大系數大于0.25,則縮小圖像
AppImage.ImageWin.PaintPicture ImageWin.Image,0,0,AMP*DX,AMP*DY,PX,PY,SX,SY
End Sub

6.在HScroll控件和VScroll控件的Change事件中輸入下面程序,對窗口圖像進行滾動處理。
Private Sub HScroll1_Change()
PX=HScroll1.Value*DW/HScroll1.Max
'計算水平滾動位置
AppImage.ImageWin.PaintPicture ImageWin.Image,0,0,AMP*DX,AMP*DY,PX,PY,SX,SY
End Sub
Private Sub VScroll1_Change()
PY=VScroll1.Value*DH/VScroll1.Max
'計算垂直滾動位置
AppImage.ImageWin.PaintPicture ImageWin.Image,0,0,AMP*DX,AMP*DY,PX,PY,SX,SY
End Sub

7.在ExitButton控件的Click事件中輸入下面程序,用于結束程序、關閉窗口。
Private Sub ExitButton_Click()
        End
End Sub

五、應用說明

窗口圖像滾動是各種數據查詢系統、多媒體圖形數據庫系統開發中的基本功能之一,本文用Windows API函數實現了窗口圖像縮放、滾動,該方法可適用于Visual C++等語言。本文全部程序均在WIN98環境中Visual Basic5.0下調試通過。 


主站蜘蛛池模板: 亚洲最大成人综合网 | 一级做受视频免费是看美女 | 欧美一级黄色片免费看 | 欧美一级片观看 | 在线亚洲观看 | 亚洲午夜一区 | 亚洲 中文 欧美 日韩 在线 | 日韩伦理片网站 | 色综合天天综合网国产国产人 | 日韩欧美高清在线观看 | 日韩毛片一级 | 亚洲影视在线观看 | 伊人精品在线观看 | 在线看欧美成人中文字幕视频 | 日本黄色免费在线 | 日韩欧美亚洲每日更新网 | 一本一道波多野结衣一区二区 | 亚洲影视在线观看 | 欧洲mv日韩mv国产mv | 四虎影视在永久在线观看 2019 | 日本www色视频成人免费 | 亚洲国产艾杏在线观看 | 婷婷久久综合九色综合九七 | 亚洲第一页在线视频 | 亚洲高清成人 | 日本高清视频色 | 日韩生活片 | 天天弄天天干 | 青青青国产色视频在线观看 | 亚洲成a人伦理 | 午夜精品福利视频 | 亚洲综合色网站 | 片免费观看在线看 | 午夜天堂在线视频 | 欧美性xxxxx极品 | 一本久久精品一区二区 | 天天综合网久久 | 天天看天天做 | 亚洲人成综合在线播放 | 青青草手机在线视频 | 日韩高清性爽一级毛片免费 |