00001 /* 00002 /-------------------------------------------------------------------- 00003 | 00004 | $Id: plbmpdec_8h-source.html,v 1.4 2004/09/15 15:26:29 uzadow Exp $ 00005 | 00006 | Copyright (c) 1996-2002 Ulrich von Zadow 00007 | 00008 \-------------------------------------------------------------------- 00009 */ 00010 00011 #ifndef INCL_PLBMPDEC 00012 #define INCL_PLBMPDEC 00013 00014 #ifndef INCL_PLPICDEC 00015 #include "plpicdec.h" 00016 #endif 00017 00018 #ifndef INCL_PLWINDEFS 00019 #include "plwindefs.h" 00020 #endif 00021 00022 //! Windows bitmap file decoder. Decodes bitmap files (compressed and 00023 //! uncompressed) of all bit depths. Returns an 8 00024 //! or 32 bpp bitmap. 00025 class PLBmpDecoder : public PLPicDecoder 00026 { 00027 00028 public: 00029 //! Creates a decoder 00030 PLBmpDecoder 00031 (); 00032 00033 //! Destroys a decoder 00034 virtual ~PLBmpDecoder 00035 (); 00036 00037 //! Opens the data source. 00038 virtual void Open (PLDataSource * pDataSrc); 00039 00040 //! Fills the bitmap with the main image. 00041 virtual void GetImage (PLBmpBase & Bmp); 00042 00043 //! 00044 virtual void Close (); 00045 00046 private: 00047 00048 // Decodes the bitmap file & info headers 00049 WINBITMAPINFOHEADER * getInfoHeader 00050 ( PLDataSource * pDataSrc, 00051 PLPixel32* Pal 00052 ); 00053 00054 // Decodes a 2-color bitmap. Ignores the palette & just uses 00055 // black & white as 'colors' 00056 void decode1bpp 00057 ( PLDataSource * pDataSrc, 00058 PLBmpBase * pBmp 00059 ); 00060 00061 // Decodes an uncompressed 16-color-bitmap. 00062 void decode4bpp 00063 ( PLDataSource * pDataSrc, 00064 PLBmpBase * pBmp 00065 ); 00066 00067 // Decodes an uncompressed 256-color-bitmap. 00068 void decode8bpp 00069 ( PLDataSource * pDataSrc, 00070 PLBmpBase * pBmp 00071 ); 00072 00073 // Decodes a compressed 16-color-bitmap. 00074 void decodeRLE4 00075 ( PLDataSource * pDataSrc, 00076 PLBmpBase * pBmp 00077 ); 00078 00079 // Decodes a compressed 256-color-bitmap. 00080 void decodeRLE8 00081 ( PLDataSource * pDataSrc, 00082 PLBmpBase * pBmp 00083 ); 00084 00085 void decodeHiColor 00086 ( PLDataSource * pDataSrc, 00087 PLBmpBase * pBmp, 00088 WINBITMAPINFOHEADER * pBMI 00089 ); 00090 00091 // Decodes true-color bitmap 00092 void decodeTrueColor 00093 ( PLDataSource * pDataSrc, 00094 PLBmpBase * pBmp, 00095 int SrcBPP 00096 ); 00097 00098 void decode15bppLine 00099 ( PLDataSource * pDataSrc, 00100 PLBmpBase * pBmp, 00101 PLBYTE * pDest 00102 ); 00103 00104 void decode16bppLine 00105 ( PLDataSource * pDataSrc, 00106 PLBmpBase * pBmp, 00107 PLBYTE * pDest 00108 ); 00109 00110 void decode24bppLine 00111 ( PLDataSource * pDataSrc, 00112 PLBmpBase * pBmp, 00113 PLBYTE * pDest 00114 ); 00115 00116 void decode32bppLine 00117 ( PLDataSource * pDataSrc, 00118 PLBmpBase * pBmp, 00119 PLBYTE * pDest 00120 ); 00121 00122 00123 // Decodes two 4-bit pixels using a palette & puts them in pDest 00124 // and pDest+4. 00125 void decode2Nibbles 00126 ( PLBYTE * pDest, 00127 PLBYTE SrcByte 00128 ); 00129 00130 // Makes a private copy of the palette in the file and sets the 00131 // alpha channel. Returns the number of colors read. 00132 int readPalette 00133 ( WINBITMAPINFOHEADER * pBMI, // Pointer to bitmapinfoheader in file. 00134 PLDataSource * pDataSrc, 00135 PLPixel32 * pPal, 00136 int RGBSize 00137 ); 00138 00139 PLPixel32 m_Pal[256]; 00140 WINBITMAPINFOHEADER * m_pBMI; 00141 }; 00142 00143 #endif 00144 /* 00145 /-------------------------------------------------------------------- 00146 | 00147 | $Log: plbmpdec_8h-source.html,v $ 00147 | Revision 1.4 2004/09/15 15:26:29 uzadow 00147 | Linux compatibility changes, doc update. 00147 | 00148 | Revision 1.9 2004/06/19 16:49:07 uzadow 00149 | Changed GetImage so it works with PLBmpBase 00150 | 00151 | Revision 1.8 2004/06/06 12:56:38 uzadow 00152 | Doxygenified documentation. 00153 | 00154 | Revision 1.7 2002/08/04 20:08:01 uzadow 00155 | Added PLBmpInfo class, ability to extract metainformation from images without loading the whole image and proper greyscale support. 00156 | 00157 | Revision 1.6 2002/03/31 13:36:41 uzadow 00158 | Updated copyright. 00159 | 00160 | Revision 1.5 2001/10/21 17:12:39 uzadow 00161 | Added PSD decoder beta, removed BPPWanted from all decoders, added PLFilterPixel. 00162 | 00163 | Revision 1.4 2001/10/06 22:37:08 uzadow 00164 | Linux compatibility. 00165 | 00166 | Revision 1.3 2001/10/06 20:44:45 uzadow 00167 | Linux compatibility 00168 | 00169 | Revision 1.2 2001/10/05 21:15:09 uzadow 00170 | Improved support for OS/2 bitmap decoding. 00171 | 00172 | Revision 1.1 2001/09/16 19:03:22 uzadow 00173 | Added global name prefix PL, changed most filenames. 00174 | 00175 | 00176 \-------------------------------------------------------------------- 00177 */