VB5实现窗口图像缩放、滚动技巧

2008-02-23 06:56:27来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

---- 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 = 1
PictureBox:Name = ImageWin, Appearance = 1-3D, ScaleMode = 3
CommandButton: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 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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何从"SOUND.DRV"中提取声音

下一篇:在Visual Basic 中实现启动程序时的闪烁屏幕