当前位置:文档之家› vb代码大全

vb代码大全

用VB5实现窗口图象缩放、滚动技巧成都理工学院计算机工程系洪志全---- Visual Basic 是Windows 平台中最常用的应用软件开发语言, 窗口图像缩放、滚动是图像处理、多媒体数据库等应用软件开发中的基本功能。

本文将介绍如何用VB 5.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 = 1PictureBox:Name = ImageWin, Appearance = 1-3D, ScaleMode = 3CommandButton:Name = ZoomIn, Caption="Zoom In"CommandButton:Name = ZoomOut, Caption="Zoom Out"CommandButton:Name = ExitButton, Caption="Exit"---- 2. 双击FORM 窗口, 并将下面程序输入到Form 对象的Load 事件中。

该程序用于读取图像的宽度和高度, 初始化常用参数, 载入窗口图像, 并将图像复制到FORM 窗口的PictureBox 图形控件容器中显示。

Private Sub Form_Load()Dim FileName As StringFileName = "C:\SAMP.BMP"Open FileName For Binary As #1Get #1, 19, ImageWidth: Get #1, , ImageHeight'读取位图的宽度和高度Close #1DW = 15 * ImageWidth - ImageWin.Width'将像点转换为Twip(微点)DH = 15 * ImageHeight - ImageWin.HeightImageWin.Width = 15 * ImageWidthImageWin.Height = 15 * ImageHeightAppImage.AutoRedraw = TrueAppImage.Caption = FileName'改变Form窗标题HScroll1.SmallChange = 100'设置滚动最小步距VScroll1.SmallChange = 100DX = ImageWin.Width: DY = ImageWin.Height'设置复制图像尺寸SX = ImageWin.Width: SY = ImageWin.HeightAMP = 1'设置缩放比例为1sWin = 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, ByValnHeight As Long, ByVal hSrcDC As Long,ByVal xSrc As Long, ByVal ySrc As Long,ByVal dwRop As Long) As LongPrivate Declare Function GetDC Lib "user32"(ByVal hwnd As Long) As LongPrivate Declare FunctionGetDesktopWindow Lib "user32" () As LongPrivate Declare Function ReleaseDC Lib "user32"(ByVal hwnd As Long, ByVal hdc As Long) As LongDim sWin, sDC, hdDim ImageWidth As Long, ImageHeight As LongDim DX, DY, SX, SY, PX, PY, DW, DH, MX, MY, X0, Y0, AMP---- 4. 双击ImageWin 对象, 并在MouseMove 事件和Mouse_down 事件中输入下面程序, 用于窗口图形的拖动滚动处理。

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 = MXIf MY > 0 And MY < VScroll1.Max Then VScroll1.Value = MYEnd IfEnd SubPrivate 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, SYEnd SubPrivate Sub ZoomOut_Click()AppImage.ImageWin.Cls'清除窗口图像If AMP > 0.25 Then AMP = AMP / 2'放大系数大于0.25,则缩小图像AppImage.ImageWin.PaintPictureImageWin.Image, 0, 0, AMP * DX, AMP * DY, PX, PY, SX, SYEnd Sub---- 6. 在HScroll 控件和VScroll 控件的Change 事件中输入下面程序, 对窗口图像进行滚动处理。

相关主题