00001 #ifndef _DLPNGIMAGE_H_
00002 #define _DLPNGIMAGE_H_
00003
00004 #include "DLImage.h"
00005 #include "DLBaseImage.h"
00006 #include "DLConst.h"
00007 #include "png.h"
00008 #include "DLSingletonDestroyer.h"
00010 void dlPNGWarning ( png_structp png_ptr, png_const_charp warning_msg );
00019 class DLPNGImage : public DLBaseImage
00020 {
00024 template <class SINGLETON> friend class DLSingletonDestroyer;
00025 private:
00029 DLPNGImage();
00030
00032 static DLPNGImage* pngImageReader;
00035 static DLSingletonDestroyer<DLPNGImage> _destroyer;
00036
00037 protected:
00041 virtual ~DLPNGImage();
00042 public:
00043
00045 static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length);
00051 static DLPNGImage * createImageReader();
00052
00058 DLImage dlLoadImage(FILE* fp);
00059
00065 void dlLoadImage(const char* filename, DLImage &image);
00066
00073 DLImage dlLoadImage(const void* pMemLoc, int nSize);
00074
00080 DLImage dlLoadImage(const char* filename);
00081
00089 DLImage dlLoadImageAtPage(const char* filename, int pageNumber);
00090
00099 DLImage dlLoadImageAtPage(const void* pMemLoc, int nSize, int pageNumber);
00100
00110 DLImage dlProcessImage(png_structp png_ptr , png_infop info_ptr);
00111
00119 void dlSaveImage(const char* filename, const DLImage& image);
00120
00129 static void dlSaveImage(const char* filename, const DLImage& dlimage, int PNG_COMPRESSION_TYPE);
00130
00138 void* dlSaveImageToMem( int& nSize, const DLImage& dlimage);
00139
00146 bool dlSupportImageFile(const char* filename);
00147
00155 bool dlSupportImageBuffer(const void* pMemLoc, int size);
00156
00163 int dlGetTotalPages(void* pMemLoc, int nSize);
00164
00170 int dlGetTotalPages(const char* filename);
00171 };
00172
00173 static DLPNGImage * dlPngProcessor = DLPNGImage::createImageReader();
00174
00175 #endif //_DLTIFFIMAGE_H_