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

Photo Album in C#

By , 14 Dec 2004
 

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
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 1membermorrisjames6 Nov '09 - 21:07 
Needs third party assemblies:(
GeneralMy vote of 1memberWertugo5558 Dec '08 - 21:57 
GeneralThis article should get 0 rating.memberdebanjan.routh3 Dec '08 - 5:39 
GeneralThe referenced component 'XPCommonControls' could not be found. memberangels77723 Nov '07 - 18:43 
GeneralRe: The referenced component 'XPCommonControls' could not be found.memberlehongquan18 Jan '11 - 17:41 
Generali am new to this but no viewmemberclaygorman24 Aug '07 - 9:39 
QuestionCan not compile projectmemberpiotrz23 Jul '07 - 6:34 
Questionred eye reductionmembermileni_836 May '07 - 1:32 
GeneralAdded Reference yet not buildingmemberdivvi13 Mar '07 - 2:25 
GeneralRe: Added Reference yet not buildingmembermapaxo24 Apr '07 - 20:04 
GeneralNeed ReferencememberATondtar28 Oct '06 - 3:28 
GeneralRe: Need Referencememberskibum1315 Feb '07 - 9:03 
GeneralRe: Need Referencemembernsimeonov14 Oct '07 - 5:52 
General"you need windows xp to use this program" [modified]memberjuwikuang21 Sep '06 - 6:02 
GeneralRe: "you need windows xp to use this program"memberHamboeck20 May '07 - 3:41 
GeneralRe: "you need windows xp to use this program"memberclaygorman24 Aug '07 - 9:49 
GeneralCannot build with .Net Framework 2.0memberdeeryezi18 Nov '05 - 22:34 
GeneralRe: Cannot build with .Net Framework 2.0memberweixuan586 Dec '05 - 18:31 
GeneralRe: Cannot build with .Net Framework 2.0memberskibum1315 Feb '07 - 9:44 
QuestionWhat is you editon of your visual studio.net? I can't open the project?memberHboyme25 Apr '05 - 5:00 
AnswerRe: What is you editon of your visual studio.net? I can't open the project?memberwhits20 May '05 - 8:39 
AnswerRe: What is you editon of your visual studio.net? I can't open the project?memberskibum1315 Feb '07 - 9:46 

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

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130516.1 | Last Updated 15 Dec 2004
Article Copyright 2004 by ebukiet2
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid