102 lines
3.2 KiB
C++
102 lines
3.2 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: Methods relating to saving + loading PSD files (photoshop)
|
|
//
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
|
|
#ifndef PSD_H
|
|
#define PSD_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "bitmap/imageformat.h" //ImageFormat enum definition
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
class CUtlBuffer;
|
|
struct Bitmap_t;
|
|
|
|
class PSDImageResources {
|
|
public:
|
|
enum Resource { eResFileInfo = 0x0404 };
|
|
|
|
struct ResElement {
|
|
Resource m_eType;
|
|
// unsigned char m_pReserved[4];
|
|
unsigned short m_numBytes;
|
|
unsigned char const *m_pvData;
|
|
};
|
|
|
|
public:
|
|
explicit PSDImageResources(unsigned int numBytes,
|
|
unsigned char const *pvBuffer)
|
|
: m_numBytes(numBytes), m_pvBuffer(pvBuffer) {}
|
|
|
|
public:
|
|
ResElement FindElement(Resource eType) const;
|
|
|
|
protected:
|
|
unsigned int m_numBytes;
|
|
unsigned char const *m_pvBuffer;
|
|
};
|
|
|
|
class PSDResFileInfo {
|
|
public:
|
|
enum ResFileInfo {
|
|
eTitle = 0x05,
|
|
eAuthor = 0x50,
|
|
eAuthorTitle = 0x55,
|
|
eDescription = 0x78,
|
|
eDescriptionWriter = 0x7A,
|
|
eKeywords = 0x19,
|
|
eCopyrightNotice = 0x74
|
|
};
|
|
|
|
struct ResFileInfoElement {
|
|
ResFileInfo m_eType;
|
|
unsigned short m_numBytes;
|
|
unsigned char const *m_pvData;
|
|
};
|
|
|
|
public:
|
|
explicit PSDResFileInfo(PSDImageResources::ResElement res) : m_res(res) {}
|
|
|
|
public:
|
|
ResFileInfoElement FindElement(ResFileInfo eType) const;
|
|
|
|
protected:
|
|
PSDImageResources::ResElement m_res;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Is a file a PSD file?
|
|
//-----------------------------------------------------------------------------
|
|
bool IsPSDFile(const char *pFileName, const char *pPathID);
|
|
bool IsPSDFile(CUtlBuffer &buf);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Returns information about the PSD file
|
|
//-----------------------------------------------------------------------------
|
|
bool PSDGetInfo(const char *pFileName, const char *pPathID, int *pWidth,
|
|
int *pHeight, ImageFormat *pImageFormat, float *pSourceGamma);
|
|
bool PSDGetInfo(CUtlBuffer &buf, int *pWidth, int *pHeight,
|
|
ImageFormat *pImageFormat, float *pSourceGamma);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Get PSD file image resources, pointers refer into the utlbuffer
|
|
//-----------------------------------------------------------------------------
|
|
PSDImageResources PSDGetImageResources(CUtlBuffer &buf);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Reads the PSD file into the specified buffer
|
|
//-----------------------------------------------------------------------------
|
|
bool PSDReadFileRGBA8888(CUtlBuffer &buf, Bitmap_t &bitmap);
|
|
bool PSDReadFileRGBA8888(const char *pFileName, const char *pPathID,
|
|
Bitmap_t &bitmap);
|
|
|
|
#endif // PSD_H
|