DLJPGImage.h

Go to the documentation of this file.
00001 #ifndef _DLJPGIMAGE_H_
00002 #define _DLJPGIMAGE_H_
00003 
00004 // Default JPEG compression quality
00005 const static short int DL_JPEG_CMPRESSION_QUALITY = 95;
00006 
00007 //#include "DLTypes.h"
00008 #include "DLImage.h"
00009 #include "DLBaseImage.h"
00010 #include "DLSingletonDestroyer.h"
00011 //#include "DLLogger.h"
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 /*extern*/
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    //Set to true to decompress a JPEG using decompression
00058    bool quantized;
00059 
00060    //next value used by jpeg_start_decompress for quantization
00061    int desired_number_of_colors;
00062 
00063    //next value set by jpeg_start_decompress() provided 
00064    //quantization is requested
00065    int actual_number_of_colors;
00066 
00067    //Pointer to an array of color values and counts defined in dlLoadImage()
00068    DLColorCounts *palette;
00069 
00070    //next value set by jpeg_read_header
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    //void setQuantized(bool value) { quantized = value; }
00113 
00119    //void setDesiredColors(int value) { desired_number_of_colors = value; }
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 };//end class
00256 static DLJPGImage * dlJpgProcessor = DLJPGImage::createImageReader();
00257 #endif //_DLJPGIMAGE_H_

DOCLIB is being developed under contract by a collaboration between:
The Laboratory for Language and Media Processing
Unviersity of Maryland, College Park
and
Booz | Allen | Hamilton

All Rights Reserved, 2003-2007