在VISUALBASIC中沒有什麼命令或函數能夠實現 將一個位圖旋轉一個角度後顯示出來,但我們可以用畫點的方式,將一個圖畫盒中的位圖 中的像素點旋轉一個角度後畫入另一個圖畫盒中,當源圖畫盒中的像素都被畫到目標圖畫 盒中時,也就完成了位圖的旋轉。
這裡主要用到了VISUALBASIC中的兩個方法:POINT 方法和PSET方法。POINT方法的作用是從源圖畫盒中提取一個像素點的顏色值;而PSET方法 的作用是按照旋轉後的坐標和相應像素點的顏色值在目標圖畫盒中畫點。顯然這個方法的 速度不會太快,因而適用於較小的圖片。下面介紹一下實現方法:
進入VISUALBASIC中,建立一個新的窗體。在窗體 中加入兩個圖畫盒控件(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變量設置為 相應值即可。