Skip to content

GDI+

There are three ways to create a graphics object

  1. From the Paint Event

Every time the control is redrawn (resized, refreshed…) this event is called, use this way if you want the control to consistently draw on the control

'this will work on any object's paint event, not just the form
Private Sub Form1_Paint(sender as Object, e as PaintEventArgs) Handles Me.Paint
Dim gra as Graphics
gra = e.Graphics
End Sub
  1. Create Graphic

This is most often used when you want to create a one time graphic on the control, or you don’t want the control to repaint itself

Dim btn as New Button
Dim g As Graphics = btn.CreateGraphics
  1. From an Existing Graphic

Use this method when you want to draw and change an existing graphic

'The existing image can be from a filename, stream or Drawing.Graphic
Dim image = New Bitmap("C:\TempBit.bmp")
Dim gr As Graphics = Graphics.FromImage(image)

To start drawing a shape you need to define a pen object The Pen accepts two parameters:

  1. Pen Color or Brush
  2. Pen Width

The Pen Object is used to create an outline of the object you want to draw

After Defining the Pen you can set specific Pen Properties

Dim pens As New Pen(Color.Purple)
pens.DashStyle = DashStyle.Dash 'pen will draw with a dashed line
pens.EndCap = LineCap.ArrowAnchor 'the line will end in an arrow
pens.StartCap = LineCap.Round 'The line draw will start rounded
'*Notice* - the Start and End Caps will not show if you draw a closed shape

Then use the graphics object you created to draw the shape

Private Sub GraphicForm_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
Dim pen As New Pen(Color.Blue, 15) 'Use a blue pen with a width of 15
Dim point1 As New Point(5, 15) 'starting point of the line
Dim point2 As New Point(30, 100) 'ending point of the line
e.Graphics.DrawLine(pen, point1, point2)
e.Graphics.DrawRectangle(pen, 60, 90, 200, 300) 'draw an outline of the rectangle

By default, the pen’s width is equal to 1

Dim pen2 as New Pen(Color.Orange) 'Use an orange pen with width of 1
Dim origRect As New Rectangle(90, 30, 50, 60) 'Define bounds of arc
e.Graphics.DrawArc(pen2, origRect, 20, 180) 'Draw arc in the rectangle bounds
End Sub

Graphics.FillShapes draws a shape and fills it in with the color given. Fill Shapes can use

  • `Brush` Tool - to fill shape with a solid color
    Dim rect As New Rectangle(50, 50, 50, 50)
    e.Graphics.FillRectangle(Brushes.Green, rect) 'draws a rectangle that is filled with green
    e.Graphics.FillPie(Brushes.Silver, rect, 0, 180) 'draws a half circle that is filled with silver
  • `HatchBrush` Tool - to fill shape with a pattern
  • Dim hBrush As New HatchBrush(HatchStyle.ZigZag, Color.SkyBlue, Color.Gray)
    'creates a HatchBrush Tool with a background color of blue, foreground color of gray,
    'and will fill with a zigzag pattern
    Dim rectan As New Rectangle(100, 100, 100, 100)
    e.Graphics.FillRectangle(hBrush, rectan)
  • `LinearGradientBrush` - to fill shape with a gradient
    Dim lBrush As New LinearGradientBrush(point1, point2, Color.MediumVioletRed, Color.PaleGreen)
    Dim rect As New Rectangle(50, 50, 200, 200)
    e.Graphics.FillRectangle(lBrush, rect)
  • `TextureBrush` - to fill shape with a picture
  • You can choose a picture from resources, an already defined Bitmap, or from a file name

    Dim textBrush As New TextureBrush(New Bitmap("C:\ColorPic.jpg"))
    Dim rect As New Rectangle(400, 400, 100, 100)
    e.Graphics.FillPie(textBrush, rect, 0, 360)

    Both the Hatch Brush Tool and LinearGradientBrush import the following statement : Imports System.Drawing.Drawing2D

    To draw text onto the form use the DrawString Method

    When you draw a string you can use any of the 4 brushes listed above

    Dim lBrush As New LinearGradientBrush(point1, point2, Color.MediumVioletRed, Color.PaleGreen)
    e.Graphics.DrawString("HELLO", New Font("Impact", 60, FontStyle.Bold), lBrush, New Point(40, 400))
    'this will draw the word "Hello" at the given point, with a linearGradient Brush

    Since you can’t define the width or height of the text use Measure Text to check text size

    Dim lBrush As New LinearGradientBrush(point1, point2, Color.MediumVioletRed, Color.PaleGreen)
    Dim TextSize = e.Graphics.MeasureString("HELLO", New Font("Impact", 60, FontStyle.Bold), lBrush)
    'Use the TextSize to determine where to place the string, or if the font needs to be smaller

    Ex: You need to draw the word "Test" on top of the form. The form's width is 120. Use this loop to decrease the font size till it will fit into the forms width

    Dim FontSize as Integer = 80
    Dim TextSize = e.graphics.measeString("Test", New Font("Impact",FontSize, FontStyle.Bold), new Brush(colors.Blue, 10)
    Do while TextSize.Width >120
    FontSize = FontSize -1
    TextSize = e.graphics.measeString("Test", New Font("Impact",FontSize, FontStyle.Bold), new Brush(colors.Blue, 10)
    Loop