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