vb.net用Region实现复杂的图形窗体

    技术2022-05-12  6

     虽然将transparencykey设置窗体的背景色可以实现图形窗体,但是,这并不是最好的,对于做视频播放器的网友来说是个问题~

    昨晚帮网友简单的决解了下图形窗体播放视频的问题~于是顺便把代码上传上来,希望有需要的人会用到~

    对于这方面有研究的网友,可加 DY大师 『VB.NET UI创意』 QQ群 59522396

     

     

     

     

     

    Public Class Form1

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        Using MyGp As New Drawing2D.GraphicsPath            MyGp.FillMode = Drawing2D.FillMode.Winding            MyGp.AddPolygon(GetPix(Me, My.Computer.FileSystem.CombinePath(Application.StartupPath, "01.png")))            Me.Region = New Region(MyGp)        End Using

        End Sub    ''' <summary>    ''' 取得窗体中图片轮廓像素点的集合    ''' </summary>    ''' <param name="Form"></param>    ''' <returns></returns>    ''' <remarks></remarks>

        Private Function GetPix(ByVal Form As Control, ByVal ImagePath As String) As Point()        Dim MyPoint() As Point = Nothing        Try

                Using MyImage As New Drawing.Bitmap(ImagePath)                Dim sum As Integer = 0                Dim MyControlImage As Bitmap = MyImage.GetThumbnailImage(Form.Width, Form.Height, Nothing, IntPtr.Zero)                Form.BackgroundImage = MyControlImage

                    '****************************************************

                    ' 这里的代码最重要

                    ' 注意:数组下标坐标点必须按照线条的顺序,否则则会出错

                    For x As Integer = 1 To MyControlImage.Width - 1                    For y As Integer = 1 To MyControlImage.Height - 1                        If MyControlImage.GetPixel(x, y).A > 254 Then  ' 若显示有少许差错 请将 0 替换为 0~254 任意试试                            ReDim Preserve MyPoint(sum)                            MyPoint(sum).X = x                            MyPoint(sum).Y = y                            sum += 1                            Exit For                        End If

                        Next

                    Next

                    For x As Integer = MyControlImage.Width - 1 To 1 Step -1                    For y As Integer = MyControlImage.Height - 1 To 1 Step -1                        If MyControlImage.GetPixel(x, y).A > 254 Then                            ReDim Preserve MyPoint(sum)  ' 若显示有少许差错 请将 0 替换为 1~255 任意试试                            MyPoint(sum).X = x                            MyPoint(sum).Y = y                            sum += 1                            Exit For                        End If                    Next                Next

                    ' 由于时间仓促,不免有多少错误之处~                ' 必须注意的是,像GIF,PNG格式背影为透明的图片,可能在某一段区域透明度为5,可能可能在某一段区域透明度为10......                ' 请将代码按自已的需要优化                '****************************************************

                End Using            Return MyPoint        Catch ex As Exception            MessageBox.Show(ex.Message)            Return MyPoint        End Try    End Function


    最新回复(0)