图像的旋转


【实例说明】
    图像的翻转在多媒体编程中也经常用到,常用的翻转有翻转90度等。本例将讲解如何对图像进行翻转操作。运行程序,单击所要“旋转90角度”按钮,实现90旋转。(本例只给出了逆时针旋转90度的,顺时针旋转90度、水平翻转、垂直翻转等网友可自行编写。)

【编程思路】
    运用Bitblt函数可将屏幕上的图像拷贝到VB中的窗体对象上。Bitblt函数功能:对指定的设置环境区域中的像素进行位块转换,以传送到另一个设备环境。其中进行位块转换的设备环境为源设备环境,要传送到的设备为目标设备环境。源环境和目标环境必须相容。下面是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
    参数:
    hDestDc:目标设备环境句柄。
    X:目标设备环境矩形区域左上角的X逻辑坐标
    Y:目标设备环境矩形区域左上角的Y逻辑坐标
    nWidth:源和目标矩形区域的逻辑宽度。
    nHeight:源和目标矩形区域的逻辑高度。
    hScrDC:源设备环境句柄。
    xSrc:源矩形区域左上角的X逻辑坐标。
    ySrc:源矩形区域左上角的Y逻辑坐标。
    dwRop:指定光栅运行代码。
    返回值:如果函数调用成功,返回非0值,否则返回0值。

【设计步骤】
    1.新建一个标准工程,创建一个新窗体,默认名为Form1。
    2.在窗体上放置两个PictureBox控件和三个CommandButton控件。
    3.将Picture1载入图片,并将其ScaleMode属性设置为3-Pixel(像素)。

    4.源程序  [素材源程序下载]


Dim h As Long
Dim w As Long
Const srCopy = &HCC0020

'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

'复制
Private Sub Command1_Click()
        For j = 0 To h Step 1
                For i = 0 To w Step 1
                        BitBlt Picture2.hDC, i, j, 1, 1, Me.Picture1.hDC, i, j, srCopy
                Next i
        Next j
End Sub

'逆时针旋转90度
Private Sub Command2_Click()
        For j = 0 To h Step 1
                For i = 0 To w Step 1
                        BitBlt Picture2.hDC, i, j, 1, 1, Me.Picture1.hDC, j, i, srCopy
                Next i
        Next j
End Sub

'退出
Private Sub Command3_Click()
        Unload Me
End Sub

Private Sub Form_Load()
        h = Picture1.ScaleHeight
        w = Picture1.ScaleWidth
End Sub