读PSD图片
在CodeProject里发现一个读取的方法. 作者只要求在使用的时候保留Assembly的名称"SimplePsd.dll".
下面是全部原代码.
CPSD.cs:
using System;
using System.IO;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace SimplePsd
{
/// <summary>
/// Main class is for opening Adobe Photoshop files
/// </summary>
public class CPSD
{
private HeaderInfo m_HeaderInfo;
private ColorModeData m_ColorModeData;
private ImageResource m_ImageResource;
private ResolutionInfo m_ResolutionInfo;
private DisplayInfo m_DisplayInfo;
private ThumbNail m_ThumbNail;
private bool m_bResolutionInfoFilled;
private bool m_bThumbnailFilled;
private bool m_bCopyright;
private short m_nColourCount;
private short m_nTransparentIndex;
private int m_nGlobalAngle;
private int m_nCompression;
private IntPtr m_hBitmap;
public CPSD()
{
m_bResolutionInfoFilled = false;
m_bThumbnailFilled = false;
m_bCopyright = false;
m_nColourCount = -1;
m_nTransparentIndex = -1;
m_nGlobalAngle = 30;
m_nCompression = -1;
m_hBitmap = IntPtr.Zero;
}
// construction, destruction
public int Load(string strPathName)
{
int nErrorCode = 0; // No errors
FileStream stream = new FileStream(strPathName, FileMode.Open, FileAccess.Read, FileShare.Read);
if(!stream.Handle.Equals(0))
{
bool bSuccessHeader = false;
bool bSuccessColourModeData = false;
bool bSuccessImageResource = false;
bool bSuccessLayerMaskInfo = false;
try
{
bSuccessHeader = ReadHeader(stream);
if(bSuccessHeader == false)
nErrorCode = -2; // Error in header
}
catch(Exception)
{
bSuccessHeader = false;
nErrorCode = -2;
}
if(bSuccessHeader)
{
try
{
bSuccessColourModeData = ReadColourModeData(stream);
if (bSuccessColourModeData == false)
nErrorCode = -3; // Error in ColourMode Data
}
catch(Exception)
{
bSuccessColourModeData = false;
nErrorCode = -3;
}
}
if(bSuccessColourModeData)
{
try
{
bSuccessImageResource = ReadImageResource(stream);
if (bSuccessImageResource == false)
nErrorCode = -4; // Error in Image Resource
}
catch(Exception)
{
bSuccessImageResource = false;
nErrorCode = -4;
}
}
if(bSuccessImageResource)
{
try
{
bSuccessLayerMaskInfo = ReadLayerAndMaskInfoSection(stream);
if ( false == bSuccessLayerMaskInfo )
nErrorCode = -5; // Error in Mask Info
}
catch (Exception)
{
bSuccessLayerMaskInfo = false;
nErrorCode = -5;
}
}
if(bSuccessImageResource)
{
try
{
nErrorCode = ReadImageData(stream);
}
catch(Exception)
{
nErrorCode = -6; // Error in Image Data
}
}
}
else
nErrorCode = -1; // Cannot open file
return nErrorCode;
}