www.pudn.com > roadextr.rar > Dib.h


#ifndef _INSIDE_VISUAL_CPP_CDIB 
#define _INSIDE_VISUAL_CPP_CDIB 
 
 
 
 
class CDib : public CObject 
{ 
	enum Alloc {noAlloc, crtAlloc, heapAlloc}; 
	DECLARE_SERIAL(CDib) 
public: 
	LPVOID m_lpvColorTable; 
	HBITMAP m_hBitmap; 
	LPBYTE m_lpImage;  // starting address of DIB bits 
	LPBYTE m_lpGreyImage; // starting address of grey DIB bits 
	LPBITMAPINFOHEADER m_lpBMIH; //  buffer containing the BITMAPINFOHEADER 
private: 
	HGLOBAL m_hGlobal; // For external windows we need to free; 
	                   //  could be allocated by this class or allocated externally 
	Alloc m_nBmihAlloc; 
	Alloc m_nImageAlloc; 
	DWORD m_dwSizeImage; // of bits -- not BITMAPINFOHEADER or BITMAPFILEHEADER 
	int m_nColorTableEntries; 
	 
	HANDLE m_hFile; 
	HANDLE m_hMap; 
	LPVOID m_lpvFile; 
	HPALETTE m_hPalette; 
public: 
 
	 
	//////////////// 
	//ะยิ๖ 
	BOOL GetRectBits(CRect rect,LPVOID pBuf,CRect bufRect=0 ); 
//	BOOL GetRectBits(CRect rect,LPVOID pBuf); 
//	BOOL IsValid(); 
 
	///////////////// 
	void PutGrey(BYTE* lpGreyImage); 
	int GetPixelByteNum(){return m_lpBMIH->biBitCount/8;} 
 
 
	CDib(); 
	CDib(CSize size, int nBitCount);	// builds BITMAPINFOHEADER 
	~CDib(); 
	int GetSizeImage() {return m_dwSizeImage;} 
	int GetSizeHeader() 
		{return sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;} 
	CSize GetDimensions(); 
	BOOL AttachMapFile(const char* strPathname, BOOL bShare = FALSE); 
	BOOL CopyToMapFile(const char* strPathname); 
	BOOL AttachMemory(LPVOID lpvMem, BOOL bMustDelete = FALSE, HGLOBAL hGlobal = NULL); 
	BOOL Draw(CDC* pDC, CRect desRect, CRect srcRect);  // until we implemnt CreateDibSection 
	//BOOL DrawDib(CDC* pDC, CPoint origin, CSize size); 
	HBITMAP CreateSection(CDC* pDC = NULL); 
	UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE); 
	BOOL MakePalette(); 
	BOOL SetSystemPalette(CDC* pDC); 
	BOOL Compress(CDC* pDC, BOOL bCompress = TRUE); // FALSE means decompress 
	HBITMAP CreateBitmap(CDC* pDC); 
	BOOL Read(CFile* pFile); 
	BOOL ReadSection(CFile* pFile, CDC* pDC = NULL); 
	BOOL Write(CFile* pFile); 
	void Serialize(CArchive& ar); 
	void Empty(); 
private: 
 
	/////////////// 
	//ะยิ๖ 
	CDib *m_pThis; 
	BOOL IsValid(); 
 
	//////////////// 
	void DetachMapFile(); 
	void ComputePaletteSize(int nBitCount); 
	void ComputeMetrics(); 
	//Tangmin 
	void CreateGreyImg(); 
 
}; 
#endif // _INSIDE_VISUAL_CPP_CDIB