00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef CFileLoaderBMPH
00023 #define CFileLoaderBMPH
00024
00025
00026
00034
00035
00036
00037 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00038
00039
00040 #if defined(_WIN32)
00041
00042 #include <windows.h>
00043
00044 #else
00045
00046 #pragma pack(push,1)
00047
00048 typedef unsigned char BYTE;
00049 typedef unsigned short WORD;
00050 typedef unsigned int DWORD;
00051 typedef int LONG;
00052
00053 typedef struct tagRGBQUAD {
00054 BYTE rgbBlue;
00055 BYTE rgbGreen;
00056 BYTE rgbRed;
00057 BYTE rgbReserved;
00058 } RGBQUAD;
00059
00060 typedef struct tagBITMAPFILEHEADER {
00061 WORD bfType;
00062 DWORD bfSize;
00063 WORD bfReserved1;
00064 WORD bfReserved2;
00065 DWORD bfOffBits;
00066 } BITMAPFILEHEADER, *PBITMAPFILEHEADER;
00067
00068 typedef struct tagBITMAPINFOHEADER{
00069 DWORD biSize;
00070 LONG biWidth;
00071 LONG biHeight;
00072 WORD biPlanes;
00073 WORD biBitCount;
00074 DWORD biCompression;
00075 DWORD biSizeImage;
00076 LONG biXPelsPerMeter;
00077 LONG biYPelsPerMeter;
00078 DWORD biClrUsed;
00079 DWORD biClrImportant;
00080 } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
00081
00082 #pragma pack(pop)
00083
00084 #endif
00085
00086 #include <iostream>
00087 #include <cstdio>
00088 #include <stdio.h>
00089 #include <string>
00090
00091 using std::string;
00092
00093
00094 const short BITMAP_MAGIC_NUMBER = 19778;
00095 const int RGB_BYTE_SIZE = 3;
00096
00097
00098 #endif // DOXYGEN_SHOULD_SKIP_THIS
00099
00100
00101
00109
00110 class cFileLoaderBMP
00111 {
00112 public:
00113
00114
00115
00116
00117
00119 cFileLoaderBMP();
00120
00122 cFileLoaderBMP(char* a_fileName);
00123
00125 ~cFileLoaderBMP();
00126
00127
00128
00129
00130
00131
00133 bool loadBMP(char* iFileName);
00134
00136 unsigned char* pBitmap() const { return (m_pBitmap); }
00137
00139 unsigned int getWidth() { return (m_width); }
00140
00142 unsigned int getHeight() { return (m_height); }
00143
00145 unsigned short getBpp() { return (m_bpp); }
00146
00148 string getLastErrorMesg(void) { return (m_errorMsg); }
00149
00151 bool isLoaded() { return (m_loaded); }
00152
00153
00154 private:
00155
00156
00157
00158
00159
00161 BITMAPFILEHEADER m_bmfh;
00162
00164 BITMAPINFOHEADER m_bmih;
00165
00167 unsigned int m_byteWidth;
00168
00169
00170 unsigned int m_padWidth;
00171
00172
00173 unsigned int m_dataSize;
00174
00176 RGBQUAD *m_colors;
00177
00179 bool m_loaded;
00180
00182 unsigned int m_width;
00183
00185 unsigned int m_height;
00186
00188 unsigned short m_bpp;
00189
00191 string m_errorMsg;
00192
00194 unsigned char* m_pBitmap;
00195
00196
00197
00198
00199
00201 void reset(void);
00202
00204 bool convert24(char *);
00205
00207 bool convert8(char *);
00208 };
00209
00210
00211 #endif
00212