虽然将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