Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

FreeImagePlus.h

00001 // ==========================================================
00002 // FreeImagePlus 3
00003 //
00004 // Design and implementation by
00005 // - Hervé Drolon (drolon@infonie.fr)
00006 //
00007 // This file is part of FreeImage 3
00008 //
00009 // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
00010 // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
00011 // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
00012 // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
00013 // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
00014 // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
00015 // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
00016 // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
00017 // THIS DISCLAIMER.
00018 //
00019 // Use at your own risk!
00020 // ==========================================================
00021 
00022 #ifndef FREEIMAGEPLUS_H
00023 #define FREEIMAGEPLUS_H
00024 
00025 #ifdef _WIN32
00026 #include <windows.h>
00027 #endif // _WIN32
00028 #include "FreeImage.h"
00029 
00030 
00031 // Compiler options ---------------------------------------------------------
00032 
00033 #if defined(FREEIMAGE_LIB) || !defined(_WIN32)
00034 #define FIP_API
00035 #define FIP_CALLCONV
00036 #else
00037 #define WIN32_LEAN_AND_MEAN
00038 #define FIP_CALLCONV __stdcall
00039 // The following ifdef block is the standard way of creating macros which make exporting 
00040 // from a DLL simpler. All files within this DLL are compiled with the FIP_EXPORTS
00041 // symbol defined on the command line. this symbol should not be defined on any project
00042 // that uses this DLL. This way any other project whose source files include this file see 
00043 // FIP_API functions as being imported from a DLL, wheras this DLL sees symbols
00044 // defined with this macro as being exported.
00045 #ifdef FIP_EXPORTS
00046 #define FIP_API __declspec(dllexport)
00047 #else
00048 #define FIP_API __declspec(dllimport)
00049 #endif // FIP_EXPORTS
00050 #endif // FREEIMAGE_LIB || !_WIN32
00051 
00053 
00054 // ----------------------------------------------------------
00055 
00061 class FIP_API fipObject
00062 {
00063 public:
00066 
00067         virtual BOOL isValid() const = 0;
00069 };
00070 
00071 // ----------------------------------------------------------
00072 
00073 class fipMemoryIO;
00074 class fipMultiPage;
00075 class fipTag;
00076 
00085 class FIP_API fipImage : public fipObject
00086 {
00087 protected:
00089         FIBITMAP *_dib;
00091         mutable BOOL _bHasChanged;
00092 
00093 public:
00094         friend class fipMultiPage;
00095 
00096 public:
00097 
00104         fipImage(FREE_IMAGE_TYPE image_type = FIT_BITMAP, WORD width = 0, WORD height = 0, WORD bpp = 0);
00106         ~fipImage();
00111         BOOL setSize(FREE_IMAGE_TYPE image_type, WORD width, WORD height, WORD bpp, unsigned red_mask = 0, unsigned green_mask = 0, unsigned blue_mask = 0);
00113         virtual void clear();
00115 
00122         fipImage(const fipImage& src);
00127         fipImage& operator=(const fipImage& src);
00133         fipImage& operator=(FIBITMAP *dib);
00134 
00135 
00148         BOOL copySubImage(fipImage& dst, int left, int top, int right, int bottom) const;
00149 
00163         BOOL pasteSubImage(fipImage& src, int left, int top, int alpha = 256);
00164 
00175         BOOL crop(int left, int top, int right, int bottom);
00176 
00177 
00179 
00191         BOOL load(const char* lpszPathName, int flag = 0);
00192 
00197         BOOL loadU(const wchar_t* lpszPathName, int flag = 0);
00198 
00207         BOOL loadFromHandle(FreeImageIO *io, fi_handle handle, int flag = 0);
00208 
00216         BOOL loadFromMemory(fipMemoryIO& memIO, int flag = 0);
00217 
00225         BOOL save(const char* lpszPathName, int flag = 0) const;
00226 
00231         BOOL saveU(const wchar_t* lpszPathName, int flag = 0) const;
00232 
00242         BOOL saveToHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flag = 0) const;
00243 
00252         BOOL saveToMemory(FREE_IMAGE_FORMAT fif, fipMemoryIO& memIO, int flag = 0) const;
00253 
00255 
00260 
00265         FREE_IMAGE_TYPE getImageType() const;
00266 
00271         WORD getWidth() const;
00272         
00277         WORD getHeight() const;
00278         
00283         WORD getScanWidth() const;
00284 
00297         operator FIBITMAP*() { 
00298                 return _dib; 
00299         }
00300 
00302         BOOL isValid() const;
00303 
00308         BITMAPINFO* getInfo() const;
00309 
00314     BITMAPINFOHEADER* getInfoHeader() const;
00315 
00321         LONG getImageSize() const;
00322         
00328         WORD getBitsPerPixel() const;
00329 
00335         WORD getLine() const;
00336 
00341         double getHorizontalResolution() const;
00342         
00347         double getVerticalResolution() const;
00348 
00353         void setHorizontalResolution(double value);
00354         
00359         void setVerticalResolution(double value);
00360 
00362 
00369         RGBQUAD* getPalette() const;
00370         
00375         WORD getPaletteSize() const;
00376 
00381         WORD getColorsUsed() const;
00382 
00387         FREE_IMAGE_COLOR_TYPE getColorType() const;
00388 
00393         BOOL isGrayscale() const;
00395 
00398 
00407         BYTE* accessPixels() const;
00408 
00414         BYTE* getScanLine(WORD scanline) const;
00415 
00424         BOOL getPixelIndex(unsigned x, unsigned y, BYTE *value) const;
00425 
00434         BOOL getPixelColor(unsigned x, unsigned y, RGBQUAD *value) const;
00435 
00444         BOOL setPixelIndex(unsigned x, unsigned y, BYTE *value);
00445 
00454         BOOL setPixelColor(unsigned x, unsigned y, RGBQUAD *value);
00455 
00457 
00469         BOOL convertToType(FREE_IMAGE_TYPE image_type, BOOL scale_linear = TRUE);
00470 
00477         BOOL threshold(BYTE T);
00478         
00485         BOOL dither(FREE_IMAGE_DITHER algorithm);
00486 
00492         BOOL convertTo4Bits();
00493 
00499         BOOL convertTo8Bits();
00500 
00507         BOOL convertToGrayscale();
00508         
00516         BOOL colorQuantize(FREE_IMAGE_QUANTIZE algorithm);
00517 
00523         BOOL convertTo16Bits555();
00524         
00530         BOOL convertTo16Bits565();
00531         
00537         BOOL convertTo24Bits();
00538         
00544         BOOL convertTo32Bits();
00545 
00551         BOOL convertToRGBF();
00552 
00561         BOOL toneMapping(FREE_IMAGE_TMO tmo, double first_param = 0, double second_param = 0);
00562 
00564 
00567 
00572         BOOL isTransparent() const;
00573 
00579         unsigned getTransparencyCount() const;
00580 
00586         BYTE* getTransparencyTable() const;
00587 
00592         void setTransparencyTable(BYTE *table, int count);
00593 
00598         BOOL hasFileBkColor() const;
00599 
00608         BOOL getFileBkColor(RGBQUAD *bkcolor) const;
00609 
00618         BOOL setFileBkColor(RGBQUAD *bkcolor);
00620 
00629         BOOL getChannel(fipImage& image, FREE_IMAGE_COLOR_CHANNEL channel) const;
00630 
00638         BOOL setChannel(fipImage& image, FREE_IMAGE_COLOR_CHANNEL channel);
00639 
00648         BOOL splitChannels(fipImage& RedChannel, fipImage& GreenChannel, fipImage& BlueChannel);
00649 
00657         BOOL combineChannels(fipImage& red, fipImage& green, fipImage& blue);
00659 
00673         BOOL rotateEx(double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask);
00674 
00681         BOOL rotate(double angle);
00682 
00687         BOOL flipHorizontal();
00688 
00693         BOOL flipVertical();
00695 
00703         BOOL invert();
00704         
00718         BOOL adjustCurve(BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel);
00719 
00726         BOOL adjustGamma(double gamma);
00727 
00735         BOOL adjustBrightness(double percentage);
00736 
00744         BOOL adjustContrast(double percentage);
00745 
00756         BOOL getHistogram(DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel = FICC_BLACK) const;
00758 
00761 
00770         BOOL rescale(WORD new_width, WORD new_height, FREE_IMAGE_FILTER filter);
00771 
00779         BOOL makeThumbnail(WORD max_size, BOOL convert = TRUE);
00781 
00791         void setModified(BOOL bStatus = TRUE) {
00792                 _bHasChanged = bStatus;
00793         }
00794 
00800         BOOL isModified() {
00801                 return _bHasChanged;
00802         }
00804 
00812         unsigned getMetadataCount(FREE_IMAGE_MDMODEL model) const;
00821         BOOL getMetadata(FREE_IMAGE_MDMODEL model, const char *key, fipTag& tag) const;
00830         BOOL setMetadata(FREE_IMAGE_MDMODEL model, const char *key, fipTag& tag);
00832 
00833 
00834   protected:
00837           BOOL replace(FIBITMAP *new_dib);
00839 
00840 };
00841 
00842 // ----------------------------------------------------------
00843 
00855 #ifdef _WIN32
00856 
00857 class FIP_API fipWinImage : public fipImage
00858 {
00859 public:
00862 
00863         fipWinImage(FREE_IMAGE_TYPE image_type = FIT_BITMAP, WORD width = 0, WORD height = 0, WORD bpp = 0);
00864 
00866         ~fipWinImage();
00867 
00869         virtual void clear();
00870 
00872         BOOL isValid() const;
00874 
00877 
00884         fipWinImage& operator=(const fipImage& src);
00885 
00892         fipWinImage& operator=(const fipWinImage& src);
00893 
00900         HANDLE copyToHandle() const;
00901 
00908         BOOL copyFromHandle(HANDLE hMem);
00909 
00914         BOOL copyFromBitmap(HBITMAP hbmp);
00916 
00925         BOOL copyToClipboard(HWND hWndNewOwner) const;
00926 
00931         BOOL pasteFromClipboard();
00933 
00941         BOOL captureWindow(HWND hWndApplicationWindow, HWND hWndSelectedWindow);
00943 
00944 
00947 
00956         void draw(HDC hDC, RECT& rcDest) const {
00957                 drawEx(hDC, rcDest, FALSE, NULL, NULL);
00958         }
00959 
00977         void drawEx(HDC hDC, RECT& rcDest, BOOL useFileBkg = FALSE, RGBQUAD *appBkColor = NULL, FIBITMAP *bg = NULL) const;
00978 
00987         void setToneMappingOperator(FREE_IMAGE_TMO tmo, double first_param = 0, double second_param = 0);
00988 
00996         void getToneMappingOperator(FREE_IMAGE_TMO *tmo, double *first_param, double *second_param) const;
00997 
00999 
01000 protected:
01002         mutable FIBITMAP *_display_dib;
01004         mutable BOOL _bDeleteMe;
01006         FREE_IMAGE_TMO _tmo;
01008         double _tmo_param_1;
01010         double _tmo_param_2;
01011 };
01012 
01013 #endif // _WIN32
01014 
01015 // ----------------------------------------------------------
01016 
01023 class FIP_API fipMemoryIO : public fipObject
01024 {
01025 protected:
01027         FIMEMORY *_hmem;
01028 
01029 public :
01039     fipMemoryIO(BYTE *data = NULL, DWORD size_in_bytes = 0);
01040 
01045         ~fipMemoryIO();
01046 
01049         BOOL isValid() const;
01050 
01054         FREE_IMAGE_FORMAT getFileType() const;
01055 
01065         FIBITMAP* load(FREE_IMAGE_FORMAT fif, int flags = 0) const;
01074         BOOL save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, int flags = 0);
01083         unsigned read(void *buffer, unsigned size, unsigned count) const;
01092         unsigned write(const void *buffer, unsigned size, unsigned count);
01097         long tell() const;
01102         BOOL seek(long offset, int origin);
01109         BOOL acquire(BYTE **data, DWORD *size_in_bytes);
01111 
01112 private:
01114         fipMemoryIO(const fipMemoryIO& src);
01116         fipMemoryIO& operator=(const fipMemoryIO& src);
01117 
01118 };
01119 
01120 // ----------------------------------------------------------
01121 
01127 class FIP_API fipMultiPage : public fipObject 
01128 {
01129 protected:
01131         FIMULTIBITMAP *_mpage;
01133         BOOL _bMemoryCache;
01134 
01135 public:
01140         fipMultiPage(BOOL keep_cache_in_memory = FALSE);
01141 
01146         ~fipMultiPage();
01147 
01149         BOOL isValid() const;
01150 
01160         BOOL open(const char* lpszPathName, BOOL create_new, BOOL read_only, int flags = 0);
01161 
01168         BOOL close(int flags = 0);
01169 
01174         int getPageCount() const;
01175 
01181         void appendPage(fipImage& image);
01182 
01189         void insertPage(int page, fipImage& image);
01190 
01196         void deletePage(int page);
01197 
01205         BOOL movePage(int target, int source);
01206 
01224         FIBITMAP* lockPage(int page);
01225 
01232         void unlockPage(fipImage& image, BOOL changed);
01233 
01242         BOOL getLockedPageNumbers(int *pages, int *count) const;
01243 };
01244 
01245 // ----------------------------------------------------------
01246 
01252 class FIP_API fipTag : public fipObject
01253 {
01254 protected:
01256         FITAG *_tag;
01257 
01258 public:
01265         fipTag();
01270         ~fipTag();
01272 
01279         fipTag(const fipTag& tag);
01284         fipTag& operator=(const fipTag& tag);
01290         fipTag& operator=(FITAG *tag);
01292 
01298         operator FITAG*() { 
01299                 return _tag; 
01300         }
01301 
01303         BOOL isValid() const;
01304 
01311         const char *getKey() const;
01316         const char *getDescription() const;
01321         WORD getID() const;
01326         FREE_IMAGE_MDTYPE getType() const;
01331         DWORD getCount() const;
01336         DWORD getLength() const;
01341         const void *getValue() const;
01347         BOOL setKey(const char *key);
01353         BOOL setDescription(const char *description);
01359         BOOL setID(WORD id);
01365         BOOL setType(FREE_IMAGE_MDTYPE type);
01371         BOOL setCount(DWORD count);
01377         BOOL setLength(DWORD length);
01383         BOOL setValue(const void *value);
01384 
01386 
01392         const char* toString(FREE_IMAGE_MDMODEL model, char *Make = NULL) const;
01393 
01394 };
01395 
01422 class FIP_API fipMetadataFind : public fipObject
01423 {
01424 protected:
01426         FIMETADATA *_mdhandle;
01427 
01428 public:
01430         fipMetadataFind();
01435         ~fipMetadataFind();
01445         BOOL findFirstMetadata(FREE_IMAGE_MDMODEL model, fipImage& image, fipTag& tag);
01453         BOOL findNextMetadata(fipTag& tag);
01454 
01455 };
01456 
01457 #endif  // FREEIMAGEPLUS_H