Description.
This program allows you to open and view image files including JPEG, 
GIF, WMF and other images. Program also provides options to stretch and shrink 
them, rotate at different angles through all axes and save them in different 
formats. 
This example uses menus, radio buttons, group boxes, open and save dialog boxes, 
picture box and status bar controls. 
Compiling Code with Visual Studio .NET.
To compile and execute code with VS.NET, create a 
Windows application and copy and paste this code in Form1.vb class. Replace all 
code from Form1.vb accept namespace includes.
 
![Compiling-Code-with-Visual-Studio .NET.jpg]()
Source Code:
Imports 
System
Imports 
System.Windows.Forms
Imports 
System.Drawing
Imports 
System.Text
Imports 
System.Drawing.Imaging
Imports 
System.IO
Public
Class win
Inherits 
Form
Private stm 
As Stream
Private pnlTop
As Panel
Private stbBtm
As StatusBar
Private lblPicMode
As Label
Private mnuMain
As MainMenu
Private pbxImg
As PictureBox
Private blnPicLoaded
As Boolean
Private cmbPicMode As ComboBox
Private dlgFile
As OpenFileDialog
Private btnTransform, btnOrg
As Button
Private gpbRotate, gpbFlip
As GroupBox
Private mnuFile, mnuOpen, mnuSave, mnuExit, 
mnuSep As MenuItem
Private strImgName, strRot, strFlip, 
strRotFlip, strStatus As [String]
Private rbnRotNone, rbnRotX, rbnRotY, 
rbnRotXY, rbnFlipNone, rbnFlip90, rbnFlip180, rbnFlip270, rbnTemp
As RadioButton
Public Sub
New()
Try
Me.Text = "Images"
pnlTop = New 
Panel
Me.Size = 
New Size(770, 570)
Me.Controls.Add(pnlTop)
Me.Menu 
= fncBuildMenus()
setControls()
strRot = rbnRotNone.Name
strFlip = rbnFlipNone.Name
pnlTop.Location = New 
Point(0, 0)
pnlTop.Size = New 
Size(750, 500)
Catch e As 
Exception
Console.WriteLine(("error ...... " + e.StackTrace))
End Try
End Sub 
'New
Private
Shared Sub 
Main()
Application.Run(New 
win)
End Sub
'Main
Private
Function fncBuildMenus()
As MainMenu 
' build the menu's 
mnuMain = New 
MainMenu
mnuFile = New 
MenuItem
mnuOpen = New 
MenuItem
mnuSave = New 
MenuItem
mnuExit = New 
MenuItem
mnuSep = New 
MenuItem
mnuFile.Text = "&File"
mnuOpen.Text = "&Open"
mnuSave.Text = "Save &As"
mnuExit.Text = "E&xit"
mnuSep.Text = "-"
mnuFile.MenuItems.Add(mnuOpen)
mnuFile.MenuItems.Add(mnuSave)
mnuFile.MenuItems.Add(mnuSep)
mnuFile.MenuItems.Add(mnuExit)
mnuMain.MenuItems.Add(mnuFile)
AddHandler mnuOpen.Click,
AddressOf fncOpen
AddHandler mnuSave.Click,
AddressOf fncSave
AddHandler mnuExit.Click,
AddressOf fncExit
Return 
mnuMain
End 
Function 'fncBuildMenus
Private
Sub setControls()
' initialize and add the 
controls to the form. 
gpbRotate = 
New 
GroupBox
gpbRotate.Location = New 
Point(0, 0)
gpbRotate.Size = New 
Size(300, 50)
gpbRotate.Text = "Rotate"
gpbFlip = New 
GroupBox
gpbFlip.Location = New 
Point(300, 0)
gpbFlip.Size = New 
Size(300, 50)
gpbFlip.Text = "Flip"
rbnRotNone = fncRadBtns("None", "None", 50, 10, 20)
rbnFlipNone = fncRadBtns("None", "None", 50, 10, 20)
rbnRotX = fncRadBtns("90 deg", "90", 70, 80, 20)
rbnRotY = fncRadBtns("180 deg", "180", 70, 150, 20)
rbnRotXY = fncRadBtns("270 deg", "270", 70, 220, 20)
rbnFlip90 = fncRadBtns("X - axis", "X", 70, 80, 20)
rbnFlip180 = fncRadBtns("Y - axis", "Y", 70, 150, 20)
rbnFlip270 = fncRadBtns("XY - axis", "XY", 70, 220, 20)
rbnRotNone.Checked = True
rbnFlipNone.Checked = 
True
btnTransform = 
New 
Button
btnTransform.Text = "Transform Image"
btnTransform.Location = 
New Point(0, 65)
btnTransform.Width = 100
btnOrg = New 
Button
btnOrg.Text = "Original Position"
btnOrg.Location = New 
Point(200, 65)
btnOrg.Width = 100
lblPicMode = New 
Label
lblPicMode.Text = "Picture Mode "
lblPicMode.Location = New 
Point(350, 67)
lblPicMode.Width = 70
cmbPicMode = New 
ComboBox
cmbPicMode.Location = New 
Point(420, 65)
cmbPicMode.DropDownStyle = ComboBoxStyle.DropDownList
cmbPicMode.Items.Add("Auto Size")
cmbPicMode.Items.Add("Center Image")
cmbPicMode.Items.Add("Normal")
cmbPicMode.Items.Add("Stretch Image")
cmbPicMode.SelectedIndex = 2
pbxImg = New 
PictureBox
pbxImg.Location = New 
Point(0, 100)
pbxImg.Size = New 
Size(750, 400)
stbBtm = New 
StatusBar
stbBtm.Text = "Normal mode - Image is clipped if it is bigger than the Picture 
Box."
stbBtm.BackColor = Color.Green
stbBtm.Size = New 
Size(750, 20)
stbBtm.Location = New 
Point(0, 550)
gpbRotate.Controls.Add(rbnRotNone)
gpbRotate.Controls.Add(rbnRotX)
gpbRotate.Controls.Add(rbnRotY)
gpbRotate.Controls.Add(rbnRotXY)
gpbFlip.Controls.Add(rbnFlipNone)
gpbFlip.Controls.Add(rbnFlip90)
gpbFlip.Controls.Add(rbnFlip180)
gpbFlip.Controls.Add(rbnFlip270)
pnlTop.Controls.Add(gpbRotate)
pnlTop.Controls.Add(gpbFlip)
pnlTop.Controls.Add(btnTransform)
pnlTop.Controls.Add(btnOrg)
pnlTop.Controls.Add(lblPicMode)
pnlTop.Controls.Add(cmbPicMode)
Controls.Add(stbBtm)
pnlTop.Controls.Add(pbxImg)
blnPicLoaded = False
strStatus = stbBtm.Text
End Sub
'setControls
Private
Function fncRadBtns(ByVal 
strText As [String],
ByVal strName
As [String],
ByVal intWidth
As Integer,
ByVal intX 
As Integer,
ByVal intY 
As Integer)
As RadioButton
Dim rbnTmp 
As RadioButton
rbnTmp = New 
RadioButton
rbnTmp.Text = strText
rbnTmp.Name = strName
rbnTmp.Width = intWidth
rbnTmp.Location = New 
Point(intX, intY)
Return 
rbnTmp
End 
Function 'fncRadBtns
Private
Sub fncOpen(ByVal 
obj As 
Object, ByVal ea
As EventArgs)
' load the picture. 
Try
dlgFile = 
New 
OpenFileDialog
dlgFile.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps 
(*.bmp)|*.bmp"
dlgFile.FilterIndex = 1
If dlgFile.ShowDialog() = DialogResult.OK
Then
If Not ((stm <<= dlgFile.OpenFile())
Is Nothing)
Then 'ToDo: 
Unsupported feature: assignment within expression. "=" changed to "<="
strImgName = dlgFile.FileName
stm.Close()
pbxImg.Image = Image.FromFile(strImgName)
blnPicLoaded = True
End
If
End If
If blnPicLoaded Then
' if the picture is loaded then enable the 
events. 
AddHandler rbnRotNone.Click,
AddressOf fncRot
AddHandler rbnRotX.Click,
AddressOf fncRot
AddHandler rbnRotY.Click,
AddressOf fncRot
AddHandler rbnRotXY.Click,
AddressOf fncRot
AddHandler rbnFlipNone.Click,
AddressOf fncFlip
AddHandler rbnFlip90.Click,
AddressOf fncFlip
AddHandler rbnFlip180.Click,
AddressOf fncFlip
AddHandler rbnFlip270.Click,
AddressOf fncFlip
AddHandler btnTransform.Click,
AddressOf fncTransform
AddHandler btnOrg.Click,
AddressOf fncTransform
AddHandler 
cmbPicMode.SelectionChangeCommitted, AddressOf 
fncPicMode
End If
Catch e As Exception
Console.WriteLine(e.StackTrace)
End Try
End Sub 
'fncOpen
Private
Sub fncSave(ByVal 
sender As 
Object, ByVal ea
As EventArgs)
Try ' save 
the image in the required format. 
Dim dlgSave
As New 
SaveFileDialog
dlgSave.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps 
(*.bmp)|*.bmp"
If dlgSave.ShowDialog() = DialogResult.OK
Then
strImgName = dlgSave.FileName
If strImgName.EndsWith("jpg")
Then
pbxImg.Image.Save(strImgName, ImageFormat.Jpeg)
End If
If strImgName.EndsWith("gif") Then
pbxImg.Image.Save(strImgName, ImageFormat.Gif)
End If
If strImgName.EndsWith("bmp") Then
pbxImg.Image.Save(strImgName, ImageFormat.Bmp)
End If
End If
Catch e As Exception
Console.WriteLine(e.StackTrace)
End Try
End Sub 
'fncSave
Private
Sub fncRot(ByVal 
obj As 
Object, ByVal ea
As EventArgs)
rbnTemp = CType(obj, 
RadioButton)
strRot = rbnTemp.Name
setStatus()
End Sub
'fncRot
Private
Sub fncFlip(ByVal 
obj As 
Object, ByVal ea
As EventArgs)
rbnTemp = CType(obj, 
RadioButton)
strFlip = rbnTemp.Name
setStatus()
End Sub
'fncFlip
Private
Sub fncTransform(ByVal 
obj As 
Object, ByVal ea
As EventArgs)
Dim btnTemp 
As Button = CType(obj, Button)
If btnTemp.Text = "Transform Image"
Then
strRotFlip = strRot + strFlip
Select Case 
strRotFlip
Case 
"180None"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)
Case 
"180X"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate180FlipX)
Case 
"180Y"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate180FlipY)
Case 
"180XY"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate180FlipXY)
Case 
"270None"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate270FlipNone)
Case 
"270X"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate270FlipX)
Case 
"270Y"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate270FlipY)
Case 
"270XY"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate270FlipXY)
Case 
"90None"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate90FlipNone)
Case 
"90X"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate90FlipX)
Case 
"90Y"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate90FlipY)
Case 
"90XY"
pbxImg.Image.RotateFlip(RotateFlipType.Rotate90FlipXY)
Case 
"NoneNone"
pbxImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipNone)
Case 
"NoneX"
pbxImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipX)
Case 
"NoneY"
pbxImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipY)
Case 
"NoneXY"
pbxImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipXY)
Case Else
pbxImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipNone)
End Select
Else
If 
btnTemp.Text = "Original Position" Then
pbxImg.Image = Image.FromFile(strImgName)
pbxImg.Refresh()
End If
End If
pbxImg.Refresh()
End Sub
'fncTransform
Private
Sub fncPicMode(ByVal 
obj As 
Object, ByVal ea
As EventArgs)
Dim objTemp 
As ComboBox = CType(obj, ComboBox)
Select Case 
objTemp.SelectedIndex
Case 
0
pbxImg.SizeMode = PictureBoxSizeMode.AutoSize
strStatus = "AutoSize mode - The PictureBox is sized equal to the size of the 
image that it contains."
Case 
1
pbxImg.SizeMode = PictureBoxSizeMode.CenterImage
strStatus = "CenterImage mode - Image is placed in the center of the Picture 
Box."
strStatus = strStatus + "If the image is big then outside edges of Image is 
clipped."
Case 
2
pbxImg.SizeMode = PictureBoxSizeMode.Normal
strStatus = "Normal mode - Image is clipped if it is bigger than the Picture 
Box."
Case 
3
pbxImg.SizeMode = PictureBoxSizeMode.StretchImage
strStatus = "Stretch mode - Image is stretched or shrunk to fit the Picture 
Box."
End Select
pbxImg.Refresh()
stbBtm.Text = strStatus
End Sub
'fncPicMode
Private
Sub setStatus()
strStatus = "The Image is rotated "
If Not 
(strRot Is 
Nothing) And strRot <> "None"
Then
strStatus = strStatus + strRot + " degrees"
End If
If Not (strFlip
Is Nothing)
And strFlip <> "None"
Then
strStatus = strStatus + " around " + strFlip + " axis."
End If
stbBtm.Text = strStatus
End Sub
'setStatus
Private
Sub fncExit(ByVal 
obj As 
Object, ByVal ea
As EventArgs)
Application.Exit()
End Sub
'fncExit
End
Class 'win