00001 #ifndef _DLJPGIMAGE_H_
00002 #define _DLJPGIMAGE_H_
00003
00004
00005 const static short int DL_JPEG_CMPRESSION_QUALITY = 95;
00006
00007
00008 #include "DLImage.h"
00009 #include "DLBaseImage.h"
00010 #include "DLSingletonDestroyer.h"
00011
00012
00014 typedef struct {
00016 unsigned char color[4];
00018 unsigned int count;
00019 }DLColorCounts;
00020
00021 #if defined (WIN32) || defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
00023
00024 struct jpeg_decompress_struct;
00025 struct jpeg_compress_struct;
00026
00027 #else
00028 extern "C" {
00029 #include "jpeglib.h"
00030 }
00031 #endif
00032
00033
00040 class DLJPGImage : public DLBaseImage
00041 {
00045 template <class SINGLETON> friend class DLSingletonDestroyer;
00046 private:
00050 DLJPGImage();
00052 static DLJPGImage* jpgImageReader;
00055 static DLSingletonDestroyer<DLJPGImage> _destroyer;
00056
00057
00058 bool quantized;
00059
00060
00061 int desired_number_of_colors;
00062
00063
00064
00065 int actual_number_of_colors;
00066
00067
00068 DLColorCounts *palette;
00069
00070
00071 int color_space;
00072
00073
00081 void dlSetupMemSrcMgr(jpeg_decompress_struct* cinfo, const void* pMemLoc, int nSize);
00082
00090 static void dlSetupMemDstMgr(jpeg_compress_struct * cinfo, const void* pMemLoc);
00091
00092 DLImage dlLoadImage(jpeg_decompress_struct& cinfo);
00093
00094 protected:
00098 virtual ~DLJPGImage();
00099
00100 public:
00101
00105 static DLJPGImage * createImageReader();
00106
00112
00113
00119
00120
00124 int dlGetActualColors() const { return actual_number_of_colors; }
00125
00126 DLColorCounts* dlGetPalette() const { return palette;}
00127
00131 int dlGetColorSpace() const { return color_space; }
00132
00133 void dlAllocatePalette(int numberOfColors);
00134
00135 void dlFreePalette();
00136
00143 void dlLoadImage(const char* filename, DLImage& image);
00144
00151 DLImage dlLoadImage(const void* pMemLoc, int nSize);
00152
00158 DLImage dlLoadImage(const char* filename);
00159
00167 DLImage dlLoadImageAtPage(const char* filename, int pageNumber);
00168
00177 DLImage dlLoadImageAtPage(const void* pMemLoc, int nSize, int pageNumber);
00178
00185 void *dlSaveImageToMem(int &nSize, const DLImage& image);
00186
00204 static void *dlSaveImageToMem(int &nSize, const DLImage& image, const int imageQuality );
00205
00212 void dlSaveImage(const char* filename, const DLImage& image);
00213
00223 static void dlSaveImage(const char* filename, const DLImage& image, const int imageQuality );
00224
00231 bool dlSupportImageFile(const char* filename);
00232
00238 bool dlSupportImageBuffer(const void* pMemLoc, int size);
00239
00246 int dlGetTotalPages(void* pMemLoc, int nSize);
00247
00253 int dlGetTotalPages(const char* filename);
00254
00255 };
00256 static DLJPGImage * dlJpgProcessor = DLJPGImage::createImageReader();
00257 #endif //_DLJPGIMAGE_H_