#ifndef _IMAGE_LOADER_H_ #define _IMAGE_LOADER_H_ enum EImageFileFormat { eFileFormat_PNG, kNumImageFileFormats }; class ImageLoader { protected: unsigned int m_Width; unsigned int m_Height; unsigned int m_RedChannelPrecision; unsigned char *m_RedData; unsigned int m_GreenChannelPrecision; unsigned char *m_GreenData; unsigned int m_BlueChannelPrecision; unsigned char *m_BlueData; unsigned int m_AlphaChannelPrecision; unsigned char *m_AlphaData; const unsigned char *const m_RawData; ImageLoader(const unsigned char *rawData) : m_RawData(rawData) , m_Width(0), m_Height(0) , m_RedChannelPrecision(0), m_RedData(0) , m_GreenChannelPrecision(0), m_GreenData(0) , m_BlueChannelPrecision(0), m_BlueData(0) , m_AlphaChannelPrecision(0), m_AlphaData(0) { } virtual ~ImageLoader() { if(m_RedData) { delete [] m_RedData; m_RedData = 0; } if(m_GreenData) { delete [] m_GreenData; m_GreenData = 0; } if(m_BlueData) { delete [] m_BlueData; m_BlueData = 0; } if(m_AlphaData) { delete [] m_AlphaData; m_AlphaData = 0; } } public: virtual bool ReadData() = 0; int GetRedChannelPrecision() const { return m_RedChannelPrecision; } const unsigned char * GetRedPixelData() const { return m_RedData; } int GetGreenChannelPrecision() const { return m_GreenChannelPrecision; } const unsigned char * GetGreenPixelData() const { return m_GreenData; } int GetBlueChannelPrecision() const { return m_BlueChannelPrecision; } const unsigned char * GetBluePixelData() const { return m_BlueData; } int GetAlphaChannelPrecision() const { return m_AlphaChannelPrecision; } const unsigned char * GetAlphaPixelData() const { return m_AlphaData; } int GetWidth() const { return m_Width; } int GetHeight() const { return m_Height; } }; #cmakedefine PNG_FOUND #endif // _IMAGE_LOADER_H_