VB中任意旋轉位圖的實現

發表于:2007-07-14來源:作者:點擊數: 標簽:
冰天雪地軟件 嚴冬 ---- 在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 變 量 設 置 為 相 應 值 即 可。 

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97