|
导读冰天雪地软件 严冬---- 在VISUAL BASIC 中 没 有 什 么 命 令 或 函 数 能 够 实 现 将 一 个 位 图 旋 转 一 个 角 度 后 显 示 出 来, 但 我 们 可 以 ... 冰天雪地软件 严冬---- 在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 变 量 设 置 为 相 应 值 即 可。 |
温馨提示:喜欢本站的话,请收藏一下本站!