www.pudn.com > cximage602_full.rar > ximabmp.h


/* 
 * File:	ximabmp.h 
 * Purpose:	BMP Image Class Loader and Writer 
 */ 
/* ========================================================== 
 * CxImageBMP (c) 07/Aug/2001 Davide Pizzolato - www.xdp.it 
 * For conditions of distribution and use, see copyright notice in ximage.h 
 * 
 * Special thanks to Troels Knakkergaard for new features, enhancements and bugfixes 
 * 
 * original CImageBMP  and CImageIterator implementation are: 
 * Copyright:	(c) 1995, Alejandro Aguilar Sierra  
 * 
 * ========================================================== 
 */ 
 
#if !defined(__ximaBMP_h) 
#define __ximaBMP_h 
 
#include "ximage.h" 
 
const int RLE_COMMAND     = 0; 
const int RLE_ENDOFLINE   = 0; 
const int RLE_ENDOFBITMAP = 1; 
const int RLE_DELTA       = 2; 
 
#if !defined(BI_RLE8) 
 #define BI_RLE8  1L 
#endif 
#if !defined(BI_RLE4) 
 #define BI_RLE4  2L 
#endif 
 
#if CXIMAGE_SUPPORT_BMP 
 
class CxImageBMP: public CxImage 
{ 
public: 
	CxImageBMP(): CxImage(CXIMAGE_FORMAT_BMP) {}; 
 
	bool Decode(CxFile * hFile); 
	bool Decode(FILE *hFile) { CxIOFile file(hFile); return Decode(&file); } 
 
#if CXIMAGE_SUPPORT_ENCODE 
	bool Encode(CxFile * hFile); 
	bool Encode(FILE *hFile) { CxIOFile file(hFile); return Encode(&file); } 
#endif // CXIMAGE_SUPPORT_ENCODE 
 
protected: 
	bool DibReadBitmapInfo(CxFile* fh, BITMAPINFOHEADER *pdib); 
}; 
 
#define BFT_ICON   0x4349   /* 'IC' */ 
#define BFT_BITMAP 0x4d42   /* 'BM' */ 
#define BFT_CURSOR 0x5450   /* 'PT' */ 
 
#ifndef WIDTHBYTES 
#define WIDTHBYTES(i)           ((unsigned)((i+31)&(~31))/8)  /* ULONG aligned ! */ 
#endif 
 
#endif 
 
#define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n)) 
#define DibWidthBytes(lpbi)     DibWidthBytesN(lpbi, (lpbi)->biBitCount) 
 
#define DibSizeImage(lpbi)      ((lpbi)->biSizeImage == 0 \ 
                                    ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \ 
                                    : (lpbi)->biSizeImage) 
 
#define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \ 
                                    ? (int)(1 << (int)(lpbi)->biBitCount)          \ 
                                    : (int)(lpbi)->biClrUsed) 
 
#define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)                 \ 
												(lpbi)->biSizeImage = DibSizeImage(lpbi); \ 
                                if ((lpbi)->biClrUsed == 0)                   \ 
                                    (lpbi)->biClrUsed = DibNumColors(lpbi);   \ 
 
#endif