www.pudn.com > ImageCheck.rar > CaiImage.h


// CaiImage.h: interface for the CCaiImage class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_CAIIMAGE_H__AA2784A7_7E88_49C5_8F83_49ADA49A0625__INCLUDED_) 
#define AFX_CAIIMAGE_H__AA2784A7_7E88_49C5_8F83_49ADA49A0625__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
const int RLE_COMMAND     = 0; 
const int RLE_ENDOFLINE   = 0; 
const int RLE_ENDOFBITMAP = 1; 
const int RLE_DELTA       = 2; 
 
#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 
 
#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);    
#define RGB2GRAY(r,g,b) (((b)*117 + (g)*601 + (r)*306) >> 10) 
 
 
class CCaiImage   
{ 
public: 
	CCaiImage(); 
	virtual ~CCaiImage(); 
public: 
	static int CompareColors(const void *elem1, const void *elem2); 
	bool Median(long Ksize); 
	void DrawImg(HDC hdc, CRect rect); 
	DWORD GetSize(); 
	int GetBitCount(); 
	BOOL CopyImg(CCaiImage* pImage); 
	BOOL SaveImg(CString strFileName); 
	void SetAutoFit(BOOL bAutoFit){m_bAutoFit=bAutoFit;	} 
	void ToGray(); 
	BOOL Destroy(); 
	LONG GetHeight(); 
	LONG GetWidth(); 
	void SetPixelGray(LONG nx, LONG ny,BYTE bGray); 
	void SetPixelIndex(long x,long y,BYTE i); 
	BOOL SetPixel(LONG nx, LONG ny, RGBQUAD rgbQuad); 
	BYTE GetPixelGray(LONG nx,LONG ny); 
	RGBQUAD GetPaletteColor(BYTE idx); 
	BOOL GetPixel(LONG nx,LONG ny,RGBQUAD& rgbQuad); 
	void Flip(); 
	DWORD GetPaletteSize(); 
	RGBQUAD* GetPalette() const; 
	void* CreateImg(DWORD dwWidth, DWORD dwHeight, DWORD wBpp); 
	bool CreateFromArray(BYTE* pArray,DWORD dwWidth,DWORD dwHeight,DWORD dwBitsperpixel, DWORD dwBytesperline, bool bFlipImage); 
	BOOL LoadBMP(CString strFilePath); 
	BYTE*				pDib; //contains the header, the palette, the pixels 
	 
protected: 
	BYTE GetNearestIndex(RGBQUAD c); 
	BYTE GetPixelIndex(long x,long y); 
	BYTE* GetBits(DWORD row=0); 
	void Bitfield2RGB(BYTE *src, WORD redmask, WORD greenmask, WORD bluemask, BYTE bpp); 
	BOOL DibReadBitmapInfo(CFile* fh, BITMAPINFOHEADER *pdib); 
	 
	int m_nImgType; 
	BITMAPINFOHEADER    head; //standard header 
	DWORD	m_dwEffWidth; 
	CRect	m_rtImgShow; 
	BOOL	m_bIsPrepare; 
	BOOL	m_bAutoFit; 
	DWORD	m_dwSize; 
}; 
 
#endif // !defined(AFX_CAIIMAGE_H__AA2784A7_7E88_49C5_8F83_49ADA49A0625__INCLUDED_)