1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
Imports System.Drawing.Drawing2D
Imports System.IO
Public Class Form1
Private layers As Layers
Private parking As Bitmap = Nothing
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Me.DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
Me.Panel1.AutoScroll = True
Me.PicParking.Location = New Point()
PicParking.SizeMode = PictureBoxSizeMode.AutoSize
PicParking.BackColor = Color.Transparent
parking = My.Resources.ParkingImage
Me.PicParking.Image = parking
PrepareListImages()
End Sub
Private Sub PrepareListImages()
'peut etre fait dans le designer
Me.ImageList1.ColorDepth = ColorDepth.Depth32Bit
Me.ImageList1.ImageSize = New Size(64, 64)
Me.ImageList1.Images.Add(My.Resources.image0)
Me.ImageList1.Images.Add(My.Resources.image1)
Me.ImageList1.Images.Add(My.Resources.image2)
Me.ImageList1.Images.Add(My.Resources.image3)
'assignation de chaque image à un layer
'& ajout a la liste layers
layers = New Layers
Dim name As String
Dim lay As Layer
For i As Integer = 0 To ImageList1.Images.Count - 1
If i = 0 Then
name = "parking"
Else
name = "bmp" + i.ToString
End If
lay = New Layer() With {
.Visible = False,
.Angle = 0.0,
.Nom = name,
.Left = 0,
.Top = 0,
.Image = ImageList1.Images(i)
}
layers.Add(lay)
Next
DataGridView1.DataSource = layers
End Sub
Private Sub PicParking_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles PicParking.Paint
Dim gr As Graphics = e.Graphics
For i As Integer = 0 To layers.Count - 1
Dim item As Layer = layers(i)
If Not item.Visible Then Continue For
Using m As New Matrix
m.RotateAt(item.Angle, item.Center)
gr.Transform = m
gr.DrawImage(item.Image, item.Left, item.Top)
End Using
Next
End Sub
Private selLayer As Layer = Nothing
Private Sub DataGridView1_CellEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
If Me.DataGridView1.SelectedRows.Count = 1 Then
selLayer = Me.DataGridView1.SelectedRows(0).DataBoundItem
End If
Me.PicParking.Invalidate()
End Sub
Private Sub DataGridView1_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged
End Sub
Private Sub PicParking_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles PicParking.MouseMove
If selLayer Is Nothing Then Return
selLayer.Left = e.X
selLayer.Top = e.Y
PicParking.Invalidate()
End Sub
Private Sub PicParking_MouseUp(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles PicParking.MouseUp
If selLayer Is Nothing Then Return
If e.Button = Windows.Forms.MouseButtons.Right Then
selLayer.Left = e.X
selLayer.Top = e.Y
PicParking.Invalidate()
selLayer = Nothing
End If
End Sub
Private Sub btnFusion_Click(sender As System.Object, e As System.EventArgs) Handles btnFusion.Click
Dim bmpFusion As New Bitmap(PicParking.Image)
Using gr As Graphics = Graphics.FromImage(bmpFusion)
For i As Integer = 0 To layers.Count - 1
Dim item As Layer = layers(i)
If Not item.Visible Then Continue For
Using m As New Matrix
m.RotateAt(item.Angle, item.Center)
gr.Transform = m
gr.DrawImage(item.Image, item.Left, item.Top)
End Using
Next
End Using
bmpFusion.Save(Directory.GetCurrentDirectory + "\saved.bmp")
End Sub
End Class |
Partager