• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    VB實現窗口圖像縮放、滾動技巧

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 24次 | 進入軟件測試論壇討論

    領測軟件測試網 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下調試通過。 

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>