VB中任意旋转位图的实现 冰 天 雪 地 软 件 严 冬 ---- 在VISUAL BASIC 中 没 有 什 么 命 令 或 函 数 能 够 实 现 将 一 个 位 图 旋 转 一 个 角 度 后 显 示 出 来, 但 我 们 可 以 用 画 点 的 方 式, 将 一 个 图 画 盒 中 的 位 图 中 的 像 素 点 旋 转 一 个 角 度 后 画 入 另 一 个 图 画 盒 中, 当 源 图 画 盒 中 的 像 素 都 被 画 到 目 标 图 画 盒 中 时, 也 就 完 成 了 位 图 的 旋 转。 ---- 这 里 主 要 用 到 了VISUAL BASIC 中 的 两 个 方 法:POINT 方 法 和PSET 方 法。POINT 方 法 的 作 用 是 从 源 图 画 盒 中 提 取 一 个 像 素 点 的 颜 色 值; 而PSET 方 法 的 作 用 是 按 照 旋 转 后 的 坐 标 和 相 应 像 素 点 的 颜 色 值 在 目 标 图 画 盒 中 画 点。 显 然 这 个 方 法 的 速 度 不 会 太 快, 因 而 适 用 于 较 小 的 图 片。 下 面 介 绍 一 下 实 现 方 法: ---- 进 入VISUAL BASIC 中, 建 立 一 个 新 的 窗 体。 在 窗 体 中 加 入 两 个 图 画 盒 控 件(Picture1 和Picture2), 设 置 它 们 的Name 属 性 为PicSource 和PicTarget, 并 为PicSource 图 画 盒 的 Picture 属 性 设 置 一 幅 位 图。 再 在 窗 体 中 加 入 一 个 按 钮(CommandRotorate), 设 置 它 的 Caption 属 性 为“ 旋 转”。 然 后 加 入 以 下 代 码: Option Explicit Const Pi = 3.14 Private Sub CommandRototate_Click()   Dim x As Integer, y As Integer   Dim X1 As Integer, Y1 As Integer   Dim X2 As Double, Y2 As Double   Dim X3 As Double, Y3 As Double   Dim JiaoDu As Double   Dim HuDu As Double   JiaoDu = 45        ' 角 度   HuDu = JiaoDu * Pi / 180  ' 弧 度   PicSource.ScaleMode = vbPixels   PicTarget.ScaleMode = vbPixels   For x = 0 To PicTarget.ScaleWidth     X1 = x - PicTarget.ScaleWidth \ 2     For y = 0 To PicTarget.ScaleHeight       Y1 = y - PicTarget.ScaleHeight \ 2       X2 = X1 * Cos(-HuDu) + Y1 * Sin(-HuDu)       Y2 = Y1 * Cos(-HuDu) - X1 * Sin(-HuDu)       X3 = X2 + PicSource.ScaleWidth \ 2       Y3 = Y2 + PicSource.ScaleHeight \ 2       If X3 > 0 And X3 < PicSource.Scale       Width - 1 And Y3 > 0 And Y3       < PicSource.ScaleHeight - 1 Then       PicTarget.PSet (x, y), PicSource.Point(X3, Y3)       End If     Next y   Next x End Sub ---- 运 行 后, 按 下“ 旋 转” 按 钮, 可 以 见 到 源 图 画 盒 中 的 位 图 旋 转45 度 后 进 入 到 目 标 图 画 盒 中。 如 果 要 改 变 旋 转 的 角 度, 只 需 将JiaoDu 变 量 设 置 为 相 应 值 即 可。