Click here to Skip to main content
Click here to Skip to main content

Photo Album in C#

, 14 Dec 2004
Rate this:
Please Sign up or sign in to vote.
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.)
    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:

    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:

    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.

_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

About the Author

ebukiet2

United States United States
No Biography provided

Comments and Discussions

 
QuestionYour F-U-K-E-D program Does Not Worked Pinmemberali_gooly200116-May-14 16:47 
GeneralMy vote of 1 PinmvpAkhil_Mittal16-May-14 8:31 
Questionyour f*** program does not worked Pinmemberali_gooly200116-May-14 7:38 
GeneralMy vote of 1 Pinmembermorrisjames6-Nov-09 21:07 
GeneralMy vote of 1 PinmemberWertugo5558-Dec-08 21:57 
GeneralThis article should get 0 rating. Pinmemberdebanjan.routh3-Dec-08 5:39 
GeneralThe referenced component 'XPCommonControls' could not be found. Pinmemberangels77723-Nov-07 18:43 
GeneralRe: The referenced component 'XPCommonControls' could not be found. Pinmemberlehongquan18-Jan-11 17:41 
Generali am new to this but no view Pinmemberclaygorman24-Aug-07 9:39 
QuestionCan not compile project Pinmemberpiotrz23-Jul-07 6:34 
Questionred eye reduction Pinmembermileni_836-May-07 1:32 
hi........
my final project is red eye reduction on c# but I can not do it Frown | :(
 
if you hellp me I will be very hapyyy
Thanks.....
GeneralAdded Reference yet not building Pinmemberdivvi13-Mar-07 2:25 
GeneralRe: Added Reference yet not building Pinmembermapaxo24-Apr-07 20:04 
GeneralNeed Reference PinmemberATondtar28-Oct-06 3:28 
GeneralRe: Need Reference Pinmemberskibum1315-Feb-07 9:03 
GeneralRe: Need Reference Pinmembernsimeonov14-Oct-07 5:52 
General"you need windows xp to use this program" [modified] Pinmemberjuwikuang21-Sep-06 6:02 
GeneralRe: "you need windows xp to use this program" PinmemberHamboeck20-May-07 3:41 
GeneralRe: "you need windows xp to use this program" Pinmemberclaygorman24-Aug-07 9:49 
GeneralCannot build with .Net Framework 2.0 Pinmemberdeeryezi18-Nov-05 22:34 
GeneralRe: Cannot build with .Net Framework 2.0 Pinmemberweixuan586-Dec-05 18:31 
GeneralRe: Cannot build with .Net Framework 2.0 Pinmemberskibum1315-Feb-07 9:44 
QuestionWhat is you editon of your visual studio.net? I can't open the project? PinmemberHboyme25-Apr-05 5:00 
AnswerRe: What is you editon of your visual studio.net? I can't open the project? Pinmemberwhits20-May-05 8:39 
AnswerRe: What is you editon of your visual studio.net? I can't open the project? Pinmemberskibum1315-Feb-07 9:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    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 | Mobile
Web01 | 2.8.140721.1 | Last Updated 15 Dec 2004
Article Copyright 2004 by ebukiet2
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid