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

  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/RobotTech/p/1167344.html
Copyright © 2011-2022 走看看