根据我写的ArcTan函数(http://www.csdn.net/expert/topic/738/738383.xml?temp=.1177179)
判断角度
再计算好Image的显示位置

解决方案 »

  1.   

    Const SRCCOPY = &HCC0020
    Const Pi = 3.14159265359
    Private Declare Function SetPixel Lib "GDI32" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal crColor As Long) As Long
    Private Declare Function GetPixel Lib "GDI32" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer) As Long
    Private Declare Function StretchBlt% Lib "GDI32" (ByVal hDC%, ByVal X%, ByVal Y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, ByVal YSrc%, ByVal nSrcWidth%, ByVal nSrcHeight%, ByVal dwRop&)
    Sub Form_Load()
        Picture1.ScaleMode = 3
        Picture2.ScaleMode = 3
    End Sub
    Sub Command1_Click()
        'rotate Right 45 degrees
         Picture2.Cls
        Call bmp_rotate(Picture1, Picture2, -3.14 / 4)
        End Sub
    Sub Command2_Click()
        'vertical convert
        Picture2.Cls
        px% = Picture1.ScaleWidth
        py% = Picture1.ScaleHeight
        retval% = StretchBlt(Picture2.hDC, 0, py%, px%, -py%, Picture1.hDC, 0, 0, px%, py%, SRCCOPY)
    End Sub
    Sub Command3_Click()
        'rotate Left 45 degrees
        Picture2.Cls
        Call bmp_rotate(Picture1, Picture2, 3.14 / 4)
    End Sub
    Sub bmp_rotate(pic1 As PictureBox, pic2 As PictureBox, ByVal theta!)
        ' bmp_rotate(pic1, pic2, theta)
        ' Rotate the image in a picture box.
        ' pic1 is the picture box with the bitmap to rotate
        ' pic2 is the picture box to receive the rotated bitmap
        ' theta is the angle of rotation
        Dim c1x As Integer, c1y As Integer
        Dim c2x As Integer, c2y As Integer
        Dim a As Single
        Dim p1x As Integer, p1y As Integer
        Dim p2x As Integer, p2y As Integer
        Dim n As Integer
        Dim r As Integer    c1x = pic1.ScaleWidth \ 2
        c1y = pic1.ScaleHeight \ 2
        c2x = pic2.ScaleWidth \ 2
        c2y = pic2.ScaleHeight \ 2    If c2x < c2y Then n = c2y Else n = c2x
            n = n - 1
            pic1hDC% = pic1.hDC
            pic2hDC% = pic2.hDC
        
            For p2x = 0 To n
                For p2y = 0 To n
                    
                    If p2x = 0 Then a = Pi / 2 Else a = Atn(p2y / p2x)
                    
                    r = Sqr(1& * p2x * p2x + 1& * p2y * p2y)
                    p1x = r * Cos(a + theta!)
                    p1y = r * Sin(a + theta!)
                    c0& = GetPixel(pic1hDC%, c1x + p1x, c1y + p1y)
                    c1& = GetPixel(pic1hDC%, c1x - p1x, c1y - p1y)
                    c2& = GetPixel(pic1hDC%, c1x + p1y, c1y - p1x)
                    c3& = GetPixel(pic1hDC%, c1x - p1y, c1y + p1x)
                    
                    If c0& <> -1 Then xret& = SetPixel(pic2hDC%, c2x + p2x, c2y + p2y, c0&)
                    If c1& <> -1 Then xret& = SetPixel(pic2hDC%, c2x - p2x, c2y - p2y, c1&)
                    If c2& <> -1 Then xret& = SetPixel(pic2hDC%, c2x + p2y, c2y - p2x, c2&)
                    If c3& <> -1 Then xret& = SetPixel(pic2hDC%, c2x - p2y, c2y + p2x, c3&)
                Next
                
                t% = DoEvents()
            Next
    End Sub
      

  2.   

    要想旋转并且抗锯齿需要用到第三方DLL,
    示例加源码电我即送:
    [email protected]