Introduction
Most of the image editors and viewers do not allow to open Adobe Photoshop images directly. Adobe Photoshop is a bitmap graphics editor (with some text and vector graphics capabilities) developed and published by Adobe Systems. It is the market leader for commercial image manipulation. Adobe Photoshop native file format (*.psd) is not documented well and quite complicated.
Having noticed that there isn't any decent C# sources for opening Adobe Photoshop files, I decided to focus my efforts on this library. The aim of this library is to provide quick opening and displaying of Photoshop images and to provide ability to convert images to other formats.
A number of web search efforts brought no results for .NET platform, but I have found a few C\C++ codes regarding Adobe Photoshop imports, including a great C++ article MyPSD class of Iosif Hamlatzis.
Having extensive C\C++ experience and beginning C# experience, I have created the SimplePsd class library that allows you to open images saved in Adobe Photoshop native format (*.psd) so it may be easily included in any other projects. Currently, the following formats are supported: RGB, Lab, CMY, CMYK, Indexed, Grayscale, Duotone. These formats can be uncompressed or compressed with RLE.
Using the code
Usage of SimplePsd library is very simple:
...
using SimplePsd;
...
private SimplePsd.CPSD psd = new SimplePsd.CPSD();
...
if(this.openFileDialog.ShowDialog().Equals(DialogResult.OK))
{
int nResult = psd.Load(openFileDialog.FileName);
if(nResult == 0)
{
int nCompression = psd.GetCompression();
string strCompression = "Unknown";
switch(nCompression)
{
case 0:
strCompression = "Raw data";
break;
case 1:
strCompression = "RLE";
break;
case 2:
strCompression = "ZIP without prediction";
break;
case 3:
strCompression = "ZIP with prediction";
break;
}
label1.Text = string.Format("Image Width: {0}px\r\nImage Height: {1}px\r\n"+
"Image BitsPerPixel: {2}\r\n"+
"Resolution (pixels/inch): X={3} Y={4}\r\n",
psd.GetWidth(),
psd.GetHeight(),
psd.GetBitsPerPixel(),
psd.GetXResolution(),
psd.GetYResolution());
label1.Text += "Compression: "+strCompression;
pictureBox1.Image = System.Drawing.Image.FromHbitmap(psd.GetHBitmap());
}
else if(nResult == -1)
MessageBox.Show("Cannot open the File");
else if(nResult == -2)
MessageBox.Show("Invalid (or unknown) File Header");
else if(nResult == -3)
MessageBox.Show("Invalid (or unknown) ColourMode Data block");
else if(nResult == -4)
MessageBox.Show("Invalid (or unknown) Image Resource block");
else if(nResult == -5)
MessageBox.Show("Invalid (or unknown) Layer and Mask Information section");
else if(nResult == -6)
MessageBox.Show("Invalid (or unknown) Image Data block");
}
Credits
I would like to thank Iosif Hamlatzis for his article and permission to use some of the converting functions from his project.
SimplePsd License
You may include the source code, modified source code, assembly within your own projects for either personal or commercial use with only one restriction: don't change the name of the library "SimplePsd.dll".
Finally, if you improve any part of this library or want to discuss something related to the sources, please feel free to contact me by e-mail.