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

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralNeed ReferencememberATondtar28 Oct '06 - 3:28 
I need XpCommonControls and xpExplorerBaar.
GeneralRe: Need Referencememberskibum1315 Feb '07 - 9:03 
Both references are free to download.
 
XpCommonControls is located here:
http://www.steepvalley.net/Downloads/tabid/71/Default.aspx
Free Registration is required (try usr:thecodeproject & pwd:project).
 
XPExplorerBar is located here:
http://www.codeproject.com/cs/miscctrl/XPTaskBar.asp
GeneralRe: Need Referencemembernsimeonov14 Oct '07 - 5:52 
skibum13 wrote:
XpCommonControls is located here:
http://www.steepvalley.net/Downloads/tabid/71/Default.aspx
Free Registration is required (try usr:thecodeproject & pwd:project).

 
Yeah, did you try to register? Their site doesn't work... perhaps some time ago it did but now you have to register in order to download their crap, but the register page doesn't work at all.
 
Good job. Now because of using so exotic controls noone can compile your project. Why didn't you guys learn that if you are writing an article you better use only the most standart controls and libs. It's purpose is to illustrate something not to show how colorful application you can write and how many gadgets you can put in.
General"you need windows xp to use this program" [modified]memberjuwikuang21 Sep '06 - 6:02 
my os is vista.
 
and ur program does not work in higher version of windows
 

 

-- modified at 12:11 Thursday 21st September, 2006
GeneralRe: "you need windows xp to use this program"memberHamboeck20 May '07 - 3:41 
Change accordingly in Form1.cs (hint: Major = 6 but Minor = 0 for Vista):
System.Environment.OSVersion.Platform == PlatformID.Win32NT &&
System.Environment.OSVersion.Version.Major >= 5 &&
System.Environment.OSVersion.Version.Minor = 0)
Application.Run(new Form1());
 

GeneralRe: "you need windows xp to use this program"memberclaygorman24 Aug '07 - 9:49 
i still cant run it in vista
GeneralCannot build with .Net Framework 2.0memberdeeryezi18 Nov '05 - 22:34 
When build the source, I get errors as below:
MainView.Designer.cs(353,38) : error CS0234: The type or namespace name 'RaftingContainer' does not exist in the namespace 'System.Windows.Forms' (are you missing an assembly reference?)

GeneralRe: Cannot build with .Net Framework 2.0memberweixuan586 Dec '05 - 18:31 
'System.Windows.Forms.RaftingContainer' is obsolete: 'This class will be removed after Beta 2, consider using ToolStripContainer/ToolStripPanel instead'
WTF | :WTF:
GeneralRe: Cannot build with .Net Framework 2.0memberskibum1315 Feb '07 - 9:44 
The "RaftingContainer" objects are just placeholders. Comment out all refereces for the following objects in MainView.Designer.cs and it should compile:
  • leftRaftingContainer
  • rightRaftingContainer
  • topRaftingContainer
  • bottomRaftingContainer
  • taskPane1

QuestionWhat is you editon of your visual studio.net? I can't open the project?memberHboyme25 Apr '05 - 5:00 
It hints me that it needs higher edition!
But mine is studio.net 2003!
What's yours?
Thank you very much!
 
Love is everything!

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

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