Click here to Skip to main content
12,405,543 members (64,065 online)
Click here to Skip to main content
Add your own
alternative version

Stats

118.3K views
2.1K downloads
51 bookmarked
Posted

A simple Windows Forms image viewer

, 31 Jan 2003
Rate this:
Please Sign up or sign in to vote.
This is a simple viewer application which allows you to apply basic operation on images such as Rotate, Flip, ROI (Region of interest) zoom and Panning.
<!-- Download Links --> <!-- Article image -->

Sample Image - LimfROI.jpg
Sample Image - LimfROI2.jpg

Introduction

This is a simple viewer application which allows you to apply basic operation on images such as Rotate, Flip, ROI (Region of interest) zoom and Panning. It offers a sample example for the powerful Matrix class use and the way to have unclassical forms look. A simple windowing method is implemented using middle muse button (available for grayscale image).

Using the code

The interesting code is based on the DisplayPort class which acts as a viewport. A command mechanism is also develop to allow multiple DisplayPort to interact with the user cooperatively. Adding new behaviour such as displaying and designing graphics above the image is easy. See the DisplayLinkRind class which is a manager of simple text overlays.

To add a DisplayPort to a WindowsForm just add a member like this and chain the MouseDown event:

public LimfWnd()
{
    this.ClientSize = new System.Drawing.Size(464, 344);

    this.m_DisplayPort = new DisplayPort();

    InitializeComponent();

    this.m_DisplayPort.MouseDown += new MouseEventHandler(LimfWnd_MouseDown);

            ...

Then add the controls to the form:

private void InitializeComponent()
{
    // 
    // LimfWnd
    // 
    this.AllowDrop = true;
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.BackColor = System.Drawing.SystemColors.WindowText;

    this.ClientSize = new System.Drawing.Size(SystemInformation.WorkingArea.Width/2, 
                                              SystemInformation.WorkingArea.Height/2);

    this.Controls.AddRange(new System.Windows.Forms.Control[] {this.m_DisplayPort,
                                                                          this.splitter1});

            ...

Add image to the DisplayPort:

private void LoadImage(object sender, System.EventArgs e)
{
    FileDialog  Boite = new OpenFileDialog();
    Boite.ShowDialog();

    if(Boite.FileName.Length > 0)
    {
        Image Img = Image.FromFile(Boite.FileName);
        m_DisplayPort.SetImage(Img);
    }
}
            ...

Chain the menu list event:

private void LimfWnd_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if(e.Button == MouseButtons.Right)
    {
        CMenuActionList CommandsLst;

        if(sender.GetType() == m_DisplayPort.GetType())
            CommandsLst = ((DisplayPort) sender).GetCommand(null);
        else
            CommandsLst = new CMenuActionList();

        if(CommandsLst == null)
            CommandsLst = new CMenuActionList();

        CommandsLst.AddMenu(1, "Quit", 1, new System.EventHandler(Quit));

Points of Interest

The main difficulty was to create the basic rotate/flip routines to manage the coordinate converter. The only limit I found regarding the use of GDI+ was the 16 bits per pixel format which is not implemented, so no use for such images.

History

Version 1.0 is the first release.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

corvado
France France
No Biography provided

You may also be interested in...

Comments and Discussions

 
AnswerError on Windows xp Pin
pippo pioppo28-Mar-12 3:09
memberpippo pioppo28-Mar-12 3:09 
Questionloading image in the specified location with actual size Pin
MrKyaw13-Mar-12 17:39
memberMrKyaw13-Mar-12 17:39 
GeneralGreat Code Pin
afshin_a30-Jul-08 11:13
memberafshin_a30-Jul-08 11:13 
GeneralGreat component Pin
athmok@yahoo.co.uk1-Feb-07 1:17
memberathmok@yahoo.co.uk1-Feb-07 1:17 
GeneralGreat Sample Pin
vivekthangaswamy27-Jan-06 6:15
membervivekthangaswamy27-Jan-06 6:15 
Generalreally nice one Pin
richarding16-Jan-06 4:16
memberricharding16-Jan-06 4:16 
GeneralGreat but needed in vb.net Pin
chinnivenkat9-Aug-04 20:20
memberchinnivenkat9-Aug-04 20:20 
GeneralRe: Great but needed in vb.net Pin
chinnivenkat10-Aug-04 17:07
memberchinnivenkat10-Aug-04 17:07 
GeneralGood job! Pin
don!marco22-Jun-04 22:15
memberdon!marco22-Jun-04 22:15 
GeneralDemo project liks MSCOREE.DLL Pin
Georgi Petrov5-May-04 2:06
memberGeorgi Petrov5-May-04 2:06 
GeneralRe: Demo project liks MSCOREE.DLL Pin
don!marco22-Jun-04 22:19
memberdon!marco22-Jun-04 22:19 
GeneralOne Really Weird Thing. Pin
kipling21-Feb-03 5:08
memberkipling21-Feb-03 5:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.160721.1 | Last Updated 1 Feb 2003
Article Copyright 2003 by corvado
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid