In this tutorial, you will configure a C# or VB.NET project for a Windows Forms application and use ImageGear .NET capabilities. You will also learn how to load a document, then view, zoom, and rotate it.
This tutorial also uses the ImageGear .NET GUI components. Make sure you've followed the steps to Install GUI Components.
For local development, ImageGear .NET must be installed from the product installer. This will ensure that licensing is set up properly for local development. Once ImageGear .NET is installed, projects can use NuGet for building and deployment.
The following tutorial refers specifically to 64-bit installations; for 32-bit installations:
- Your project should already be set to compile to target Debug and x86, and you should have the directory: $YOURLOCALPROJ\bin\x86\Debug\.
- Throughout these instructions, replace x64 with x86.
- The 32-bit ImageGear binaries are found in $INSTALLDIR\ImageGear .NET v24\Bin\x86
Using Visual Studio 2015 or later:
- Create a new "Windows Forms Application" project, using C# or VB.NET and name the project: IG_Tutorial_WinForms.
- If you installed IG NET 64-bit, using the Configuration Manager, create a new project platform (if you don’t have one already) for x64. Make sure your project is set to compile targeting Debug and x64. Make sure you now have $YOURLOCALPROJ\bin\x64\Debug\, and if it is not there, create it.
- Add references and required resources into your projects in one of the following ways:
- Recommended: use our NuGet Packages. For this project, you need the following packages:
Accusoft.ImageGear.WinForms.nupkg (https://www.nuget.org/packages/Accusoft.ImageGear.WinForms/)
- Manually:
- Copy all files (and folders) inside $INSTALLDIR\ImageGear .NET v24\Bin\x64 to your local output bin directory in your project (i.e., $YOURLOCALPROJ\bin\x64\Debug\ ).
- Add the following references to your project from $YOURLOCALPROJ\bin\x64\Debug\:
- ImageGear24.Core.dll
- ImageGear24.Evaluation.dll
- ImageGear24.Formats.Common.dll
- ImageGear24.Presentation.dll
- ImageGear24.Windows.Forms.dll
Your output target directory should be set to $YOURLOCALPROJ\bin\x64\Debug\
- Next, you will add some pertinent controls to your form. For this tutorial, keep the default names for the controls:
- First, create a menu on the form. From the Windows Forms toolbox, drag a MenuStrip control onto the form:
- Create three MenuItems called File, View, and Processing.
- Under the File menu, add Load Page
- Under the View menu, add Zoom In and Zoom Out.
- Under the Processing menu, add Rotate 90.
- Double-click each added menu item to create a Click Event Handler.
- Second, also from the toolbox, drag the ImGearPageView control onto the form. This control will be used to display the document loaded. Set the Dock (in the Layout group) property of the imGearPageView1 control to Fill. This will cause the control to resize as the form resizes.
- At this point your project is ready for some code. The following code can be used to load a document, view it using an ImGearPageView control, zoom in/zoom out on it, and rotate it. In the next section, we will go over some areas of this sample code in more detail.
C# |
Copy Code |
using System;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using ImageGear.Core;
using ImageGear.Display;
using ImageGear.Processing;
using ImageGear.Formats;
using ImageGear.Evaluation;
namespace IG_Tutorial_WinForms
{
public partial class Form1 : Form
{
// Hold the image data.
private ImGearPage igPage = null;
// Control how the page is displayed.
private ImGearPageDisplay imGearPageDisplay = null;
public Form1()
{
// Initialize evaluation license.
ImGearEvaluationManager.Initialize();
// Initialize common formats.
ImGearCommonFormats.Initialize();
InitializeComponent();
}
private void loadPageToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter =
ImGearFileFormats.GetSavingFilter(ImGearSavingFormats.UNKNOWN);
if (DialogResult.OK == openFileDialog1.ShowDialog())
{
using (FileStream stream =
new FileStream(openFileDialog1.FileName, FileMode.Open,
FileAccess.Read, FileShare.Read))
{
try
{
// Load the image into the page.
igPage = ImGearFileFormats.LoadPage(stream, 0);
}
catch (ImGearException ex)
{
Debug.WriteLine(ex.Message);
}
}
if (null != igPage && null != igPage.DIB &&
!igPage.DIB.IsEmpty())
{
// Create a new page display.
imGearPageDisplay = new ImGearPageDisplay(igPage);
// Associate the page display with the page view.
imGearPageView1.Display = imGearPageDisplay;
// Cause the page view to repaint.
imGearPageView1.Invalidate();
}
}
}
private void zoomInToolStripMenuItem_Click(object sender, EventArgs e)
{
if (null != imGearPageDisplay && !imGearPageDisplay.Page.DIB.IsEmpty())
{
// Get the current zoom info.
ImGearZoomInfo igZoomInfo = imGearPageDisplay.GetZoomInfo(imGearPageView1);
// Increase the zoom.
igZoomInfo.Horizontal.Value = igZoomInfo.Horizontal.Value * 1.25;
igZoomInfo.Vertical.Value = igZoomInfo.Vertical.Value * 1.25;
igZoomInfo.Horizontal.Fixed = true;
igZoomInfo.Vertical.Fixed = true;
// Set the new zoom values and repaint the view.
imGearPageDisplay.UpdateZoomFrom(igZoomInfo);
imGearPageView1.Invalidate();
}
}
private void zoomOutToolStripMenuItem_Click(object sender, EventArgs e)
{
if (null != imGearPageDisplay && !imGearPageDisplay.Page.DIB.IsEmpty())
{
// Get the current zoom info.
ImGearZoomInfo igZoomInfo = imGearPageDisplay.GetZoomInfo(imGearPageView1);
igZoomInfo.Horizontal.Value = igZoomInfo.Horizontal.Value * (1 / 1.25);
igZoomInfo.Vertical.Value = igZoomInfo.Vertical.Value * (1 / 1.25);
igZoomInfo.Horizontal.Fixed = true;
igZoomInfo.Vertical.Fixed = true;
// Set the new zoom values and repaint the view.
imGearPageDisplay.UpdateZoomFrom(igZoomInfo);
imGearPageView1.Invalidate();
}
}
private void rotate90ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (null != imGearPageDisplay && null != igPage && !imGearPageDisplay.Page.DIB.IsEmpty())
{
try
{
// Rotate the given page 90 degrees using ImGearRotationValues.VALUE_90.
// ImGearRotationValues.VALUE_90 is the constant value for indicating the amount of the rotation.
// It may be changed for other values, e.g. ImGearRotationValues.VALUE_180, ImGearRotationValues.VALUE_270.
ImGearProcessing.Rotate(igPage, ImGearRotationValues.VALUE_90);
imGearPageView1.Invalidate();
}
catch (ImGearException ex)
{
Debug.WriteLine(ex.Message);
}
}
}
}
} |
VB.NET |
Copy Code |
Imports System.IO
Imports System.Diagnostics
Imports ImageGear
Imports ImageGear.Core
Imports ImageGear.Windows.Forms
Imports ImageGear.Display
Imports ImageGear.Processing
Imports ImageGear.Formats
Imports ImageGear.Evaluation
Public Class Form1
' Hold the image data.
Private igPage As ImGearPage
' Control how the page is displayed.
Private igPageDisplay As ImGearPageDisplay
Public Sub New()
'Initialize evaluation license.
ImGearEvaluationManager.Initialize()
'Initialize common formats.
ImGearCommonFormats.Initialize()
' This call is required by the designer.
InitializeComponent()
End Sub
Private Sub LoadPageToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles LoadPageToolStripMenuItem.Click
Dim openFileDialog1 As New OpenFileDialog
openFileDialog1.Filter = "All files (*.*)|*.*"
openFileDialog1.FilterIndex = 1
openFileDialog1.RestoreDirectory = True
If openFileDialog1.ShowDialog = DialogResult.OK Then
Using stream As New FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read)
Try
' Load the image into the page.
igPage = ImGearFileFormats.LoadPage(stream, 0)
Catch ex As ImGearException
Debug.WriteLine(ex.Message)
End Try
If Not igPage Is Nothing AndAlso Not igPage.DIB Is Nothing Then
' Create a new page display.
igPageDisplay = New ImGearPageDisplay(igPage)
' Associate the page display with the page view.
ImGearPageView1.Display = igPageDisplay
' Cause the page view to repaint.
ImGearPageView1.Invalidate()
End If
End Using
End If
End Sub
Private Sub ZoomInToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ZoomInToolStripMenuItem.Click
If Not igPageDisplay Is Nothing AndAlso Not igPageDisplay.Page.DIB.IsEmpty() Then
' Get the current zoom info.
Dim igZoomInfo As ImGearZoomInfo
igZoomInfo = igPageDisplay.GetZoomInfo(ImGearPageView1)
' Increase the zoom.
igZoomInfo.Horizontal.Value = igZoomInfo.Horizontal.Value * 1.25
igZoomInfo.Vertical.Value = igZoomInfo.Vertical.Value * 1.25
igZoomInfo.Horizontal.Fixed = True
igZoomInfo.Vertical.Fixed = True
' Set the new zoom values and repaint the view.
igPageDisplay.UpdateZoomFrom(igZoomInfo)
ImGearPageView1.Invalidate()
End If
End Sub
Private Sub ZoomOutToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ZoomOutToolStripMenuItem.Click
If Not igPageDisplay Is Nothing AndAlso Not igPageDisplay.Page.DIB.IsEmpty() Then
' Get the current zoom info.
Dim igZoomInfo As ImGearZoomInfo
igZoomInfo = igPageDisplay.GetZoomInfo(ImGearPageView1)
' Decrease the zoom.
igZoomInfo.Horizontal.Value = igZoomInfo.Horizontal.Value / 1.25
igZoomInfo.Vertical.Value = igZoomInfo.Vertical.Value / 1.25
igZoomInfo.Horizontal.Fixed = True
igZoomInfo.Vertical.Fixed = True
' Set the new zoom values and repaint the view.
igPageDisplay.UpdateZoomFrom(igZoomInfo)
ImGearPageView1.Invalidate()
End If
End Sub
Private Sub Rotate90ToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles Rotate90ToolStripMenuItem.Click
If Not igPage Is Nothing Then
Try
' Rotate the given page 90 degrees using ImGearRotationValues.VALUE_90.
' ImGearRotationValues.VALUE_90 is the constant value for indicating the amount of the rotation.
' It may be changed for other values, e.g. ImGearRotationValues.VALUE_180, ImGearRotationValues.VALUE_270.
ImGearProcessing.Rotate(igPage, ImGearRotationValues.VALUE_90)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
ImGearPageView1.Invalidate()
End If
End Sub
End Class |
Now, we'll take a closer look at each section of the code:
- First, add the ImGearEvaluationManager.Initialize() call if you are evaluating the product. You also need to initialize common formats.
C# |
Copy Code |
public Form1()
{
// Initialize evaluation license.
ImGearEvaluationManager.Initialize();
// Initialize common formats.
ImGearCommonFormats.Initialize();
InitializeComponent();
} |
VB.NET |
Copy Code |
Public Sub New()
'Initialize evaluation license.
ImGearEvaluationManager.Initialize()
'Initialize common formats.
ImGearCommonFormats.Initialize()
' This call is required by the designer.
InitializeComponent()
End Sub |
- Next, load and display a document:
C# |
Copy Code |
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter =
ImGearFileFormats.GetSavingFilter(ImGearSavingFormats.UNKNOWN);
if (DialogResult.OK == openFileDialog1.ShowDialog())
{
using (FileStream stream =
new FileStream(openFileDialog1.FileName, FileMode.Open,
FileAccess.Read, FileShare.Read))
{
try
{
// Load the image into the page.
igPage = ImGearFileFormats.LoadPage(stream, 0);
}
catch (ImGearException ex)
{
Debug.WriteLine(ex.Message);
}
}
if (null != igPage && null != igPage.DIB &&
!igPage.DIB.IsEmpty())
{
// Create a new page display.
imGearPageDisplay = new ImGearPageDisplay(igPage);
// Associate the page display with the page view.
imGearPageView1.Display = imGearPageDisplay;
// Cause the page view to repaint.
imGearPageView1.Invalidate();
}
} |
VB.NET |
Copy Code |
Dim openFileDialog1 As New OpenFileDialog
openFileDialog1.Filter = "All files (*.*)|*.*"
openFileDialog1.FilterIndex = 1
openFileDialog1.RestoreDirectory = True
If openFileDialog1.ShowDialog = DialogResult.OK Then
Using stream As New FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read)
Try
' Load the image into the page.
igPage = ImGearFileFormats.LoadPage(stream, 0)
Catch ex As ImGearException
Debug.WriteLine(ex.Message)
End Try
If Not igPage Is Nothing AndAlso Not igPage.DIB Is Nothing Then
' Create a new page display.
igPageDisplay = New ImGearPageDisplay(igPage)
' Associate the page display with the page view.
ImGearPageView1.Display = igPageDisplay
' Cause the page view to repaint.
ImGearPageView1.Invalidate()
End If
End Using
End If |
- Execute the Zoom In operation:
C# |
Copy Code |
if (null != imGearPageDisplay && !imGearPageDisplay.Page.DIB.IsEmpty())
{
// Get the current zoom info.
ImGearZoomInfo igZoomInfo = imGearPageDisplay.GetZoomInfo(imGearPageView1);
// Increase the zoom.
igZoomInfo.Horizontal.Value = igZoomInfo.Horizontal.Value * 1.25;
igZoomInfo.Vertical.Value = igZoomInfo.Vertical.Value * 1.25;
igZoomInfo.Horizontal.Fixed = true;
igZoomInfo.Vertical.Fixed = true;
// Set the new zoom values and repaint the view.
imGearPageDisplay.UpdateZoomFrom(igZoomInfo);
imGearPageView1.Invalidate();
} |
VB.NET |
Copy Code |
If Not igPageDisplay Is Nothing AndAlso Not igPageDisplay.Page.DIB.IsEmpty() Then
' Get the current zoom info.
Dim igZoomInfo As ImGearZoomInfo
igZoomInfo = igPageDisplay.GetZoomInfo(ImGearPageView1)
' Increase the zoom.
igZoomInfo.Horizontal.Value = igZoomInfo.Horizontal.Value * 1.25
igZoomInfo.Vertical.Value = igZoomInfo.Vertical.Value * 1.25
igZoomInfo.Horizontal.Fixed = True
igZoomInfo.Vertical.Fixed = True
' Set the new zoom values and repaint the view.
igPageDisplay.UpdateZoomFrom(igZoomInfo)
ImGearPageView1.Invalidate()
End If |
Similarly, you can perform Zoom Out by modifying the multiplier of the Horizontal and Vertical values as (1/1.25). See the zoomOutToolStripMenuItem_Click function in the code example in step 5 (above).
- Finally, rotate the page displayed:
C# |
Copy Code |
if (null != imGearPageDisplay && null != igPage && !imGearPageDisplay.Page.DIB.IsEmpty())
{
try
{
// Rotate the given page 90 degrees using ImGearRotationValues.VALUE_90.
// ImGearRotationValues.VALUE_90 is the constant value for indicating the amount of the rotation.
// It may be changed for other values, e.g. ImGearRotationValues.VALUE_180, ImGearRotationValues.VALUE_270.
ImGearProcessing.Rotate(igPage, ImGearRotationValues.VALUE_90);
imGearPageView1.Invalidate();
}
catch (ImGearException ex)
{
Debug.WriteLine(ex.Message);
}
} |
VB.NET |
Copy Code |
If Not igPage Is Nothing Then
Try
' Rotate the given page 90 degrees using ImGearRotationValues.VALUE_90.
' ImGearRotationValues.VALUE_90 is the constant value for indicating the amount of the rotation.
' It may be changed for other values, e.g. ImGearRotationValues.VALUE_180, ImGearRotationValues.VALUE_270.
ImGearProcessing.Rotate(igPage, ImGearRotationValues.VALUE_90)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
ImGearPageView1.Invalidate()
End If |
Notice that for performing 180 and 270 degree rotations, you can simply change the second parameter of the Rotate method to ImGearRotationValues.VALUE_180 and ImGearRotationValues.VALUE_270, respectively.