1 #ifndef __TCIMAGE_H__ 2 #define __TCIMAGE_H__ 3 4 #include <TCFoundation/TCObject.h> 5 #include <TCFoundation/TCTypedObjectArray.h> 6 7 #include <stdio.h> 8 9 class TCImageFormat; 10 class TCImageOptions; 11 12 typedef enum 13 { 14 TCRgb8, 15 TCRgba8, 16 TCRgb16, 17 TCRgba16 18 } TCImageDataFormat; 19 20 typedef bool (*TCImageProgressCallback)(CUCSTR message, float progress, 21 void* userData); 22 23 typedef TCTypedObjectArray<TCImageFormat> TCImageFormatArray; 24 25 class TCExport TCImage : public TCObject 26 { 27 public: 28 TCImage(void); 29 30 virtual void setDataFormat(TCImageDataFormat format); getDataFormat(void)31 TCImageDataFormat getDataFormat(void) { return dataFormat; } 32 virtual void setSize(int xSize, int ySize); 33 virtual void getSize(int &xSize, int &ySize); getWidth(void)34 int getWidth(void) const { return width; } getHeight(void)35 int getHeight(void) const { return height; } getCroppedX(void)36 int getCroppedX(void) const { return croppedX; } getCroppedY(void)37 int getCroppedY(void) const { return croppedY; } setDpi(int value)38 virtual void setDpi(int value) { dpi = value; } getDpi(void)39 int getDpi(void) const { return dpi; } 40 virtual void setLineAlignment(int value); getLineAlignment(void)41 int getLineAlignment(void) const { return lineAlignment; } 42 virtual void setFlipped(bool value); getFlipped(void)43 bool getFlipped(void) { return flipped; } 44 virtual void allocateImageData(void); 45 virtual void setImageData(TCByte *value); getImageData(void)46 TCByte *getImageData(void) { return imageData; } 47 virtual int getRowSize(void); 48 // virtual TCObject *copy(void) const; 49 virtual bool loadData(TCByte *data, long length, 50 TCImageProgressCallback progressCallback = NULL, 51 void *progressUserData = NULL); 52 virtual bool loadFile(FILE *file, 53 TCImageProgressCallback progressCallback = NULL, 54 void *progressUserData = NULL); 55 virtual bool loadFile(const char *filename, 56 TCImageProgressCallback progressCallback = NULL, 57 void *progressUserData = NULL); 58 virtual bool saveFile(const char *filename, 59 TCImageProgressCallback progressCallback = NULL, 60 void *progressUserData = NULL); getFormatName(void)61 char *getFormatName(void) { return formatName; } 62 virtual void setFormatName(const char *value); 63 virtual TCImage *createSubImage(int x, int y, int cx, int cy); 64 virtual void setComment(const char *value); 65 virtual void autoCrop(TCUShort r, TCUShort g, TCUShort b); 66 virtual void autoCrop(void); getComment(void)67 const char *getComment(void) { return comment; } 68 virtual TCImageOptions *getCompressionOptions(void); 69 TCImage *getScaledImage(int scaledWidth, int scaledHeight, 70 bool premultipliedAlpha = false); 71 TCImage *getScaledImage(double scaleFactor, 72 bool premultipliedAlpha = false); 73 74 static int roundUp(int value, int nearest); 75 static void addImageFormat(TCImageFormat *imageFormat, 76 bool release = false); 77 78 #ifdef WIN32 79 static TCImage *createFromResource(HMODULE hModule, int resourceId, 80 int lineAlignment, bool flipped, LPCTSTR resourceType); 81 static TCImage *createFromResource(HMODULE hModule, int resourceId, 82 int lineAlignment = 1, bool flipped = false, double scaleFactor = 1.0); 83 static HBITMAP createDIBSection(HDC hBitmapDC, int bitmapWidth, 84 int bitmapHeight, BYTE **bmBuffer, bool force32 = false); 85 static HICON loadIconFromPngResource(HMODULE hModule, int resourceId, 86 double scaleFactor = 1.0, bool force32 = false); 87 static HBITMAP loadBmpFromPngResource(HMODULE hModule, int resourceId, 88 double scaleFactor = 1.0, bool force32 = false, int rightPad = 0); 89 90 HBITMAP createBmp(bool force32 = false, int rightPad = 0); 91 void getBmpAndMask(HBITMAP &hBitmap, HBITMAP &hMask, 92 bool updateSource = false, bool force32 = false); 93 HBITMAP createMask(bool updateSource = false, TCByte threshold = 128); 94 #endif // WIN32 95 protected: 96 virtual ~TCImage(void); 97 virtual void dealloc(void); 98 virtual void syncImageData(void); 99 100 static TCImageFormat *formatWithName(char *name); 101 static TCImageFormat *formatForData(const TCByte *data, long length); 102 static TCImageFormat *formatForFile(const char *filename); 103 static TCImageFormat *formatForFile(FILE *file); 104 static void initStandardFormats(void); 105 106 TCByte *imageData; 107 TCImageDataFormat dataFormat; 108 int bytesPerPixel; 109 int width; 110 int height; 111 int croppedX; 112 int croppedY; 113 int dpi; 114 int lineAlignment; 115 bool flipped; 116 char *formatName; 117 bool userImageData; 118 char *comment; 119 TCImageOptions *compressionOptions; 120 121 static TCImageFormatArray *imageFormats; 122 123 static class TCImageCleanup 124 { 125 public: 126 ~TCImageCleanup(void); 127 } imageCleanup; 128 friend class TCImageCleanup; 129 }; 130 131 typedef TCTypedObjectArray<TCImage> TCImageArray; 132 133 #endif // __TCIMAGE_H__ 134