Source code here
Code:
Public Class PaintForm
Dim g As Graphics
Dim startLocation As Point
Dim endLocation As Point
Dim TempLocation As New Point(-1, -1)
Dim TempLocation2 As New Point(-1, -1)
Dim NumberOfAngle As Integer = 0
Dim drawing As Boolean = False
Dim CurrentColor As Color = Color.Blue
Dim CurrentColor2 As Color = Color.LightSkyBlue
Dim LastImage As New Bitmap(875, 461)
Dim M1 As New Bitmap(875, 461)
Dim M2 As New Bitmap(875, 461)
Dim M3 As New Bitmap(875, 461)
Dim M4 As New Bitmap(875, 461)
Dim PenWidth As Single = 1.0F
Dim PenPoint As Pen
Dim SavedFileAddress As String = ""
Dim CurrentFont As Font
'******************************
' * ' *
' * ' *
' * By NoCheatImPGM ' *
' * ' *
' * ' *
'******************************
Function FillRegion(ByVal X As Integer, ByVal Y As Integer, ByVal FillCol As Color) As Boolean
If X < 0 Or X > LastImage.Width Or Y < 0 Or Y > LastImage.Height Then
Return False
End If
Application.DoEvents()
Dim points As Stack = New Stack
points.Push(New Point(X, Y))
Dim Pointcolor As Color = LastImage.GetPixel(X, Y)
Do
Dim p As Point = CType(points.Pop(), Point)
LastImage.SetPixel(p.X, p.Y, FillCol)
If UpPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
points.Push(New Point(p.X, p.Y - 1))
End If
If DownPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
points.Push(New Point(p.X, p.Y + 1))
End If
If RightPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
points.Push(New Point(p.X + 1, p.Y))
End If
If LeftPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
points.Push(New Point(p.X - 1, p.Y))
End If
Loop While points.Count > 0
Return True
End Function
Function UpPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
Dim result As Boolean = False
If (Y > 0) Then
If (LastImage.GetPixel(X, Y - 1) = Col) Then
result = True
End If
End If
Return result
End Function
Function DownPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
Dim result As Boolean = False
If (Y < LastImage.Height - 1) Then
If (LastImage.GetPixel(X, Y + 1) = Col) Then
result = True
End If
End If
Return result
End Function
Function RightPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
Dim result As Boolean = False
If (X < LastImage.Width - 1) Then
If (LastImage.GetPixel(X + 1, Y) = Col) Then
result = True
End If
End If
Return result
End Function
Function LeftPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
Dim result As Boolean = False
If (X > 0) Then
If (LastImage.GetPixel(X - 1, Y) = Col) Then
result = True
End If
End If
Return result
End Function
Sub UpdateImage()
g = Graphics.FromImage(LastImage)
Me.PictureBox1.Image = LastImage
End Sub
Sub ReloadPen(ByVal PenWd As Single, ByVal CurColor As Color)
PenPoint = New Pen(CurColor, PenWd)
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
If drawing = False Then
startLocation = e.Location
drawing = True
If MultiAngleRadioButton.Checked Then
If TempLocation.X = -1 Then
TempLocation = startLocation
TempLocation2 = startLocation
End If
endLocation = e.Location
g.DrawLine(PenPoint, TempLocation, endLocation)
TempLocation = endLocation
ElseIf TriangleRadioButton.Checked Then
If TempLocation.X = -1 Then
TempLocation = startLocation
TempLocation2 = startLocation
End If
If NumberOfAngle <= 2 Then
endLocation = e.Location
g.DrawLine(PenPoint, TempLocation, endLocation)
TempLocation = endLocation
If NumberOfAngle = 2 Then
g.DrawLine(PenPoint, TempLocation, TempLocation2)
TempLocation = New Point(-1, -1)
NumberOfAngle = 0
Else
NumberOfAngle += 1
End If
End If
End If
End If
ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
If MultiAngleRadioButton.Checked Then
If TempLocation.X <> -1 Then
endLocation = e.Location
g.DrawLine(PenPoint, TempLocation, TempLocation2)
TempLocation = New Point(-1, -1)
End If
End If
End If
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If drawing = True Then
If LineRadioButton.Checked Then
g.DrawLine(PenPoint, startLocation.X, startLocation.Y, e.X, e.Y)
startLocation = e.Location
UpdateImage()
ElseIf EraserRadioButton.Checked Then
Dim p As New Pen(Color.White, PenWidth)
g.DrawLine(p, startLocation.X, startLocation.Y, e.X, e.Y)
startLocation = e.Location
UpdateImage()
End If
End If
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
If drawing Then
If RectangleRadioButton.Checked Then
endLocation = e.Location
Dim s As Point
s.X = endLocation.X - startLocation.X
If s.X < 0 Then
startLocation.X = endLocation.X
End If
s.Y = endLocation.Y - startLocation.Y
If s.Y < 0 Then
startLocation.Y = endLocation.Y
End If
s.X = Math.Abs(s.X)
s.Y = Math.Abs(s.Y)
g.DrawRectangle(PenPoint, New Rectangle(startLocation, s))
ElseIf GradientRectAngleRadioButton.Checked Then
endLocation = e.Location
Dim s As Point
If s.X < 0 Then
startLocation.X = endLocation.X
ElseIf s.X = 0 Then
s.X = 1
End If
s.Y = endLocation.Y - startLocation.Y
If s.Y < 0 Then
startLocation.Y = endLocation.Y
ElseIf s.Y = 0 Then
s.Y = 1
End If
s.X = Math.Abs(s.X)
s.Y = Math.Abs(s.Y)
Dim b As Brush
b = New Drawing2D.LinearGradientBrush(New Rectangle(startLocation, s), CurrentColor, CurrentColor2, Drawing2D.LinearGradientMode.BackwardDiagonal)
g.FillRectangle(b, New Rectangle(startLocation, s))
ElseIf CircleRadioButton.Checked Then
endLocation = e.Location
Dim s As Point
s.X = endLocation.X - startLocation.X
If s.X < 0 Then
startLocation.X = endLocation.X
End If
s.Y = endLocation.Y - startLocation.Y
If s.Y < 0 Then
startLocation.Y = endLocation.Y
End If
s.X = Math.Abs(s.X)
s.Y = Math.Abs(s.Y)
If s.X > s.Y Then
s.Y = s.X
Else
s.X = s.Y
End If
g.DrawEllipse(PenPoint, New Rectangle(startLocation, s))
ElseIf ArcRadioButton.Checked Then
endLocation = e.Location
Dim s As Point
s.X = endLocation.X - startLocation.X
If s.X < 0 Then
startLocation.X = endLocation.X
End If
s.Y = endLocation.Y - startLocation.Y
If s.Y < 0 Then
startLocation.Y = endLocation.Y
End If
s.X = Math.Abs(s.X)
s.Y = Math.Abs(s.Y)
If s.X > s.Y Then
s.Y = s.X
Else
s.X = s.Y
End If
g.DrawArc(PenPoint, New Rectangle(startLocation, s), 0, -180)
ElseIf ParallelepipedRadioButton.Checked Then
endLocation = e.Location
Dim s As Point
s.X = endLocation.X - startLocation.X
If s.X < 0 Then
Dim tmp As Integer = startLocation.X
startLocation.X = endLocation.X
endLocation.X = tmp
End If
s.Y = endLocation.Y - startLocation.Y
If s.Y < 0 Then
Dim tmp As Integer = startLocation.Y
startLocation.Y = endLocation.Y
endLocation.Y = tmp
End If
s.X = Math.Abs(s.X)
s.Y = Math.Abs(s.Y)
Dim p(3) As Point
p(0) = New Point(startLocation.X + s.X / 5, startLocation.Y)
p(1) = New Point(startLocation.X + s.X, startLocation.Y)
p(2) = New Point(endLocation.X - s.X / 5, endLocation.Y)
p(3) = New Point(endLocation.X - s.X, endLocation.Y)
g.DrawPolygon(PenPoint, p)
ElseIf FillRadioButton.Checked Then
FillRegion(e.X, e.Y, CurrentColor)
ElseIf TextRadioButton.Checked Then
Dim txt As String = Me.TextDrawTextBox.Text
g.DrawString(txt, CurrentFont, New Drawing2D.HatchBrush(Drawing2D.HatchStyle.BackwardDiagonal, CurrentColor), e.X, e.Y)
End If
End If
drawing = False
UpdateImage()
End Sub
Private Sub PaintForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CurrentFont = Me.Font
FontButton.Text = CurrentFont.ToString
Me.ColorButton.BackColor = Color.Black
Me.Color2Button.BackColor = Color.Red
g = Graphics.FromImage(LastImage)
g.Clear(Color.White)
UpdateImage()
ReloadPen(PenWidth, CurrentColor)
End Sub
Private Sub ColorButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ColorButton.Click
If ColorDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
CurrentColor = ColorDialog1.Color
Me.ColorButton.BackColor = CurrentColor
ReloadPen(PenWidth, CurrentColor)
End If
End Sub
Private Sub Color2Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Color2Button.Click
If ColorDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
CurrentColor2 = ColorDialog1.Color
Me.Color2Button.BackColor = CurrentColor2
End If
End Sub
Private Sub ClearToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClearToolStripMenuItem.Click
ClearScreen()
End Sub
Sub ClearScreen()
LastImage = New Bitmap(501, 501)
g = Graphics.FromImage(LastImage)
g.Clear(Color.White)
UpdateImage()
End Sub
Private Sub SaveToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveToolStripMenuItem.Click
If SavedFileAddress = "" Then
SaveFileDialog1.Filter = "Bitmap File (*.bmp)|*.bmp"
If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
SavedFileAddress = SaveFileDialog1.FileName
LastImage.Save(SavedFileAddress)
Me.Text = SaveFileDialog1.FileName
End If
Else
LastImage.Save(SavedFileAddress)
Me.Text = SaveFileDialog1.FileName
End If
End Sub
Private Sub SaveAsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveAsToolStripMenuItem.Click
SaveFileDialog1.Filter = "Bitmap File (*.bmp)|*.bmp"
If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
SavedFileAddress = SaveFileDialog1.FileName
LastImage.Save(SavedFileAddress)
Me.Text = SaveFileDialog1.FileName
End If
End Sub
Private Sub TriangleRadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriangleRadioButton.CheckedChanged
TempLocation = New Point(-1, -1)
End Sub
Private Sub P1RadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P1RadioButton.CheckedChanged
PenWidth = 1.0F
ReloadPen(PenWidth, CurrentColor)
End Sub
Private Sub P2RadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P2RadioButton.CheckedChanged
PenWidth = 5.0F
ReloadPen(PenWidth, CurrentColor)
End Sub
Private Sub P3RadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P3RadioButton.CheckedChanged
PenWidth = 10.0F
ReloadPen(PenWidth, CurrentColor)
End Sub
Private Sub M1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles M1ToolStripMenuItem.Click
M1 = LastImage.Clone()
End Sub
Private Sub M2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles M2ToolStripMenuItem.Click
M2 = LastImage.Clone()
End Sub
Private Sub M3ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles M3ToolStripMenuItem.Click
M3 = LastImage.Clone()
End Sub
Private Sub M4ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles M4ToolStripMenuItem.Click
M4 = LastImage.Clone()
End Sub
Private Sub S1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S1ToolStripMenuItem.Click
LastImage = M1.Clone
UpdateImage()
End Sub
Private Sub S2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S2ToolStripMenuItem.Click
LastImage = M2.Clone
UpdateImage()
End Sub
Private Sub S3ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S3ToolStripMenuItem.Click
LastImage = M3.Clone
UpdateImage()
End Sub
Private Sub S4ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S4ToolStripMenuItem.Click
LastImage = M4.Clone
UpdateImage()
End Sub
Private Sub NewToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewToolStripMenuItem.Click
If SavedFileAddress = "" Then
Dim result As Integer = MsgBox("Would you like to save this picture", MsgBoxStyle.YesNo)
If result = MsgBoxResult.Yes Then
SaveFileDialog1.Filter = "Bitmap File (*.bmp)|*.bmp" & "NoCheatImPGM Extansion (*.PGM) | *.PGM"
If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
SavedFileAddress = SaveFileDialog1.FileName
LastImage.Save(SavedFileAddress)
Me.Text = SaveFileDialog1.FileName
End If
End If
End If
g.Clear(Color.White)
UpdateImage()
SavedFileAddress = ""
End Sub
Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
If SavedFileAddress = "" Then
Dim result As Integer = MsgBox("Would you like to save the image before exiting?", MsgBoxStyle.YesNoCancel)
If result = MsgBoxResult.Yes Then
SaveFileDialog1.Filter = "Bitmap File (*.bmp)|*.bmp"
If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
SavedFileAddress = SaveFileDialog1.FileName
LastImage.Save(SavedFileAddress)
Me.Text = SaveFileDialog1.FileName
End If
ElseIf result = MsgBoxResult.No Then
End
End If
End If
End Sub
Private Sub TextRadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextRadioButton.CheckedChanged
If Me.TextRadioButton.Checked = True Then
Me.TextDrawTextBox.Visible = True
FontButton.Visible = True
Else
Me.TextDrawTextBox.Visible = False
FontButton.Visible = False
End If
End Sub
Private Sub FontButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FontButton.Click
If FontDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
CurrentFont = FontDialog1.Font
FontButton.Text = CurrentFont.ToString
End If
End Sub
Private Sub MessageLabel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click
MsgBox("This is a simple tool created by NoCheatImPGM & Co. Thanks for using.", MsgBoxStyle.Information)
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
End Sub
Private Sub LineRadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LineRadioButton.CheckedChanged
End Sub
End Class






