Click here to Skip to main content
15,881,600 members
Articles / Desktop Programming / Windows Forms
Article

Photo Album in C#

Rate me:
Please Sign up or sign in to vote.
2.21/5 (17 votes)
14 Dec 20044 min read 134.7K   5.4K   82   26
An article describing how to make a photo album like program.

A compiled binary is included. Also, the program will make your photos into directories containing only files (=Images) or folders. Since the program will mess with your folder structure, recommend only running this program with a copy of your images (that you do not mind messing up). I can not be held responsible for any unintended consequences of this program, and any harm that it might cause your data.

Sample Image

Introduction

The following is a description of the Photo Album program I am writing. It is designed to be a standalone photo viewing and editing application. As of now, it is able to load the images and display them as thumbnails. There is also a preview window. The program also lets the user change the image's metadata (or properties) that appear when you click Properties in Windows Explorer and go to the "Summary" tab.

Note that you need to be using the .NET framework version 2.0, as the project uses generics and other features that were only available in version 2.0.

Background

The program currently includes a task pane (like the one in Windows Explorer). However, there are no commands on it yet. These will of course be updated. The taskpane was developed by Mathew Hall, whose article can be found on The Code Project here (great job!).

Using the code

Really, there is no code to re-use in this article. There are a few classes in the "Photo Album Helper Controls" project:

  • CloseButton -- Mimics the close button on a tool window (that is the type of window you get when you pull off one of the toolbars in Paint).
  • ToolWindowTitleBar -- Mimics the title bar of a tool window. One thing to mention here is that the visual styles (that are part of Windows) aren't quite up to snuff, and don't paint text correctly. If you look at a Windows tool window, you will see that the text is white; yet, when you try and paint it on with the following code, the text paints on black. (This is not a problem with .NET, but rather a problem with Windows.)
    C#
    protected override void OnPaint(PaintEventArgs e)
    {
        ...
    
        VisualStyleRenderer vsr = new VisualStyleRenderer("Window", 2, state);
    
        vsr.DrawText(e.Graphics, new Rectangle(offset, 0, 
            Width - 3 * offset - h, Height),
            Caption, true, TextFormatFlags.EndEllipsis);
        ...
    }

    Instead, I had to use the following code:

    C#
    protected override void OnPaint(PaintEventArgs e)
    {
        ...
    
        e.Graphics.DrawString(Caption, SystemFonts.SmallCaptionFont,
            SystemBrushes.ActiveCaptionText,
            new RectangleF(offset, 
                (Height - (int)e.Graphics.MeasureString(Caption, 
                SystemFonts.SmallCaptionFont).Height)/2,
                Width - 3 * offset - h, Height
            )
        );
        ...
    }
  • ToolWindowGroup -- This combines the above two controls into a container control. It looks like a panel that has a title bar tool window header.

    One thing to note here is that when you add controls to it, and you dock them, you always want them to be in front (of the title bar, especially when you dock to fill). To accomplish this, I added the following code:

    C#
    protected override void OnControlAdded(ControlEventArgs e)
    {
        TitleBar.SendToBack();
        // always send the titlebar to the back whenever a control is added.
    }
  • CyclingProgressBar -- As the name suggests, this control mimics the progress bar controls, but instead of showing a percentage complete, it cycles. This control is actually an ownerdraw user control, which uses the new visual styles to render. This is actually quite a useful control.

Points of Interest

The code for this project is contained in three different projects. We already mentioned the "PhotoAlbumHelperControls", but in addition to that, there is also a library that mimics the folder tree. It dynamically updates the structure whenever a change occurs on the system. For my purposes however, I needed a set of classes that acted like the folder tree but kept track of images and albums. What is in this library is a result of that. The code in this library has not yet been cleaned up and is still a work in progress. Not every feature has been tested. An interesting thing to note here is that with these classes, you can update the metadata of an image file. Right now, there is only support for the date/time the picture was taken (which changed property number 306 and not the number that Windows uses) and the title of the image. Obviously, there are countless other properties and this is being worked on.

C#
_Photo.Properties.Date.Value = DatePictureTakenDateTimePicker.Value;
// this is in the file EditablePropertiesControl.cs

History

  • 12/14/2004 - First release on The Code Project. Alpha release (really only a viewer).

Coming Features

  • Edit all image properties.
    • Including special editing of people in the picture, and interfacing with MS Outlook contacts.
  • Combining similar images into a multipage TIFF file.
  • Other layouts/views including "Slideshow view".
  • Image editing.
    • Crop
    • Red-eye
    • Rotate
  • Other suggestions welcome.

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


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionCan i get the proper source code Pin
Member 1319604714-Mar-18 4:42
Member 1319604714-Mar-18 4:42 
GeneralMy vote of 1 Pin
Akhil Mittal16-May-14 8:31
professionalAkhil Mittal16-May-14 8:31 
GeneralMy vote of 1 Pin
morrisjames6-Nov-09 21:07
morrisjames6-Nov-09 21:07 
GeneralMy vote of 1 Pin
Wertugo5558-Dec-08 21:57
Wertugo5558-Dec-08 21:57 
GeneralThis article should get 0 rating. Pin
debanjan.routh3-Dec-08 5:39
debanjan.routh3-Dec-08 5:39 
GeneralThe referenced component 'XPCommonControls' could not be found. Pin
angels77723-Nov-07 18:43
angels77723-Nov-07 18:43 
GeneralRe: The referenced component 'XPCommonControls' could not be found. Pin
GjaLjnk18-Jan-11 17:41
GjaLjnk18-Jan-11 17:41 
Generali am new to this but no view Pin
claygorman24-Aug-07 9:39
claygorman24-Aug-07 9:39 
QuestionCan not compile project Pin
piotrz23-Jul-07 6:34
piotrz23-Jul-07 6:34 
Questionred eye reduction Pin
mileni_836-May-07 1:32
mileni_836-May-07 1:32 
GeneralAdded Reference yet not building Pin
divvi13-Mar-07 2:25
divvi13-Mar-07 2:25 
GeneralRe: Added Reference yet not building Pin
mapaxo24-Apr-07 20:04
mapaxo24-Apr-07 20:04 
GeneralNeed Reference Pin
ATondtar28-Oct-06 3:28
ATondtar28-Oct-06 3:28 
GeneralRe: Need Reference Pin
skibum1315-Feb-07 9:03
skibum1315-Feb-07 9:03 
GeneralRe: Need Reference Pin
nsimeonov14-Oct-07 5:52
nsimeonov14-Oct-07 5:52 
General"you need windows xp to use this program" [modified] Pin
juwikuang21-Sep-06 6:02
juwikuang21-Sep-06 6:02 
GeneralRe: "you need windows xp to use this program" Pin
Hamboeck20-May-07 3:41
Hamboeck20-May-07 3:41 
GeneralRe: "you need windows xp to use this program" Pin
claygorman24-Aug-07 9:49
claygorman24-Aug-07 9:49 
GeneralCannot build with .Net Framework 2.0 Pin
ChineseLeaf18-Nov-05 22:34
ChineseLeaf18-Nov-05 22:34 
GeneralRe: Cannot build with .Net Framework 2.0 Pin
weixuan586-Dec-05 18:31
weixuan586-Dec-05 18:31 
GeneralRe: Cannot build with .Net Framework 2.0 Pin
skibum1315-Feb-07 9:44
skibum1315-Feb-07 9:44 
QuestionWhat is you editon of your visual studio.net? I can't open the project? Pin
Hboyme25-Apr-05 5:00
Hboyme25-Apr-05 5:00 
AnswerRe: What is you editon of your visual studio.net? I can't open the project? Pin
whits20-May-05 8:39
whits20-May-05 8:39 
AnswerRe: What is you editon of your visual studio.net? I can't open the project? Pin
skibum1315-Feb-07 9:46
skibum1315-Feb-07 9:46 

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.