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

  • 相关阅读:
    MySQL学习笔记:repeat、loop循环
    链表//相交链表
    单位和值
    链表//环形链表 II
    css样式设置小技巧
    链表//环形链表
    CSS代码缩写,占用更少的带宽
    CSS布局模型
    CSS盒模型
    CSS格式化排版
  • 原文地址:https://www.cnblogs.com/RobotTech/p/1167344.html
Copyright © 2011-2022 走看看