zoukankan      html  css  js  c++  java
  • VB.NET 中图形旋转任意角度 [ZT]

    最近CSDN有几个人问这个问题,图形旋转任意角度方法算法都很多,这里主要用 Graphics.RotateTransform()方法实现。

    Public Class Form1
        Dim img1 As Image
        Const PI = 3.14159265
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Me.PictureBox1.Image = Rotate(img1, 30)

        End Sub
        '
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            img1 = Image.FromFile("d:\9.jpg")
            Me.PictureBox1.Image = img1
        End Sub

        Public Function Rotate(ByVal imgSource As Image, ByVal degree As Integer) As Image
            degree = degree Mod 360
            If degree < 0 Then degree = 360 + degree
            If imgSource Is Nothing Then Return Nothing
            Dim ImgTarget As Image = Nothing
            Try
                Select Case degree
                    Case 0 To 89
                        ImgTarget = Rotate0_90(imgSource, degree)
                    Case 90 To 179
                        ImgTarget = Rotate90_180(imgSource, degree)
                    Case 180 To 269
                        ImgTarget = Rotate180_270(imgSource, degree)
                    Case 270 To 359
                        ImgTarget = Rotate270_360(imgSource, degree)
                End Select
            Catch
            End Try
            Return ImgTarget
        End Function
        Private Function Rotate0_90(ByVal img As Image, ByVal degree As Integer) As Image
            Dim ImgTarget As Bitmap
            Dim alpha As Double = (degree / 180) * PI

            Dim iWidth As Integer = img.Width * Math.Cos(alpha) + img.Height * Math.Sin(alpha)
            Dim iHeight As Integer = img.Width * Math.Sin(alpha) + img.Height * Math.Cos(alpha)

            ImgTarget = New Bitmap(iWidth, iHeight, Drawing.Imaging.PixelFormat.Format24bppRgb)
            Dim g As Graphics
            g = Graphics.FromImage(ImgTarget)

            g.TranslateTransform(img.Height * Math.Sin(alpha), 0)

            g.RotateTransform(degree)
            'ImgTarget.MakeTransparent(ImgTarget.GetPixel(1, 1))
            g.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height))
            Return ImgTarget
        End Function
        Private Function Rotate90_180(ByVal img As Image, ByVal degree As Integer) As Image
            Dim ImgTarget As Bitmap
            Dim alpha As Double = ((degree - 90) / 180) * PI

            Dim iHeight As Integer = img.Width * Math.Cos(alpha) + img.Height * Math.Sin(alpha)
            Dim iWidth As Integer = img.Width * Math.Sin(alpha) + img.Height * Math.Cos(alpha)

            ImgTarget = New Bitmap(iWidth, iHeight, Drawing.Imaging.PixelFormat.Format24bppRgb)
            Dim g As Graphics
            g = Graphics.FromImage(ImgTarget)

            g.TranslateTransform(iWidth, img.Height * Math.Sin(alpha))

            g.RotateTransform(degree)
            'ImgTarget.MakeTransparent(ImgTarget.GetPixel(1, 1))
            g.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height))
            Return ImgTarget
        End Function
        Private Function Rotate180_270(ByVal img As Image, ByVal degree As Integer) As Image
            Dim ImgTarget As Bitmap
            Dim alpha As Double = ((degree - 180) / 180) * PI

            Dim iWidth As Integer = img.Width * Math.Cos(alpha) + img.Height * Math.Sin(alpha)
            Dim iHeight As Integer = img.Width * Math.Sin(alpha) + img.Height * Math.Cos(alpha)

            ImgTarget = New Bitmap(iWidth, iHeight, Drawing.Imaging.PixelFormat.Format24bppRgb)
            Dim g As Graphics
            g = Graphics.FromImage(ImgTarget)

            g.TranslateTransform(img.Width * Math.Cos(alpha), iHeight)

            g.RotateTransform(degree)
            'ImgTarget.MakeTransparent(ImgTarget.GetPixel(1, 1))
            g.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height))
            Return ImgTarget
        End Function
        Private Function Rotate270_360(ByVal img As Image, ByVal degree As Integer) As Image
            Dim ImgTarget As Bitmap
            Dim alpha As Double = ((degree - 270) / 180) * PI

            Dim iHeight As Integer = img.Width * Math.Cos(alpha) + img.Height * Math.Sin(alpha)
            Dim iWidth As Integer = img.Width * Math.Sin(alpha) + img.Height * Math.Cos(alpha)

            ImgTarget = New Bitmap(iWidth, iHeight, Drawing.Imaging.PixelFormat.Format24bppRgb)
            Dim g As Graphics
            g = Graphics.FromImage(ImgTarget)

            g.TranslateTransform(0, img.Width * Math.Cos(alpha))

            g.RotateTransform(degree)
            'ImgTarget.MakeTransparent(ImgTarget.GetPixel(1, 1))
            g.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height))
            Return ImgTarget
        End Function
    End Class

  • 相关阅读:
    4.异常捕获后再次抛出
    图像滤镜处理算法:灰度、黑白、底片、浮雕
    JAVA层和JNI层实现Bitmap图镜像功能。
    关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
    镜象变换的源代码
    android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
    android获取项目下的一张图片的绝对路径问题以及解决方法
    fwrite用法
    关于毁灭地球
    memset,memcpy
  • 原文地址:https://www.cnblogs.com/RobotTech/p/1167344.html
Copyright © 2011-2022 走看看