www.pudn.com > JingXiang-Design-Jeff.rar > BmpFile.h


// BmpFile.h: interface for the BmpFile class. 
 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_BMPFILE_H__3BA3F282_1A90_11D4_8C58_A2DB4618981D__INCLUDED_) 
#define AFX_BMPFILE_H__3BA3F282_1A90_11D4_8C58_A2DB4618981D__INCLUDED_ 
 
#include "BmpDef.h" 
#define GET_GRAY(R,G,B)(BYTE)((float)(R)*0.3+(float)(G)*0.51+(float)(B)*0.19)// Ghange To Gray MACRO 
#if _MSC_VER > 1000 
#pragma once  
#endif // _MSC_VER > 1000 
 
#define FIRSTSIZEFORSHOW    (1024*1024) 
#define FIRSTSIZEFORBMPBIT  (500*1024) 
#define FIRSTGRAYDATABUFFERSIZE (1024*1024) 
#define FIRSTPUBLICBUFFERSIZE    (2*1024*1024) 
 
#define HIGH(x)        ((x)>>0x08) 
#define  LOW(x)        ((x)&0x00FF) 
#define LINE_BYTE(x)   ((((x)+3)>>2)<<2) 
 
 
 
class BmpFile :virtual public CFile 
{ 
public:	 
	BOOL BrightAdjusting(int Adjust_Num,RECT *pInput_=NULL); 
	BOOL InverseImage(RECT *pInput_=NULL); 
//	UINT TmpFileLenth; 
	CFile TmpFile; 
	int StrongBorderMethod; 
	BOOL LoadLowThought(RECT *pInput_=NULL,float Kernel[3][3]=NULL); 
 
	BOOL Convolution(RECT *pInput_=NULL,int *Kernel=NULL,int Col_Num=3,int Total_Num=9); 
    BOOL Convolution_3_3(RECT *pInput_=NULL,int Kernel[3][3]=NULL); 
    BOOL Convolution_3_3_Float(RECT *pInput_=NULL,float Kernel[3][3]=NULL); 
 
	RECT RangeRectBak; // Used For Dialog 'ForLancet' Class on OnApply and OnCancel And OnOk FUnction 
	POINT Border[4][2][3]; 
	BOOL StrongBorder(int Method=0,RECT *pInput_=NULL); 
    BOOL DetectBorder(RECT *pInput_=NULL); 
	BYTE * pPublicBuffer; 
	UINT PublicBufferSize; 
	 
	BOOL MedianFilter(RECT *pInput_=NULL); 
	BOOL ChangeToGray(void); 
	BOOL Init_Palette_For_Gray(RGBQuad *pQuad=NULL,int PaletteNum=256); 
 
	BMPInfoHeader InfoHeader_For_Gray; 
	BMPInfoHeader InfoHeader_Bak; 
	BYTE * pBMPDataForGray; 
	UINT  GrayDataBufferSize; 
	int AutoGetSwitchForLancet( int Method); 
	BOOL CopyImageDataAsNonCompressionDataToMemForShow(void);//BMPInfoHeader *pInfo=NULL,BYTE *p_Palette=NULL,BYTE *p_Bits=NULL); 
 
    //char ForTest; 
   	BOOL GetLancet(int Switch,RECT *pInput=NULL,int Switch_=-1); 
	BOOL IsLancet;  
    int RangeOfAreaForLancet; 
	int SwitchForLancet; 
	int GetPointGray(int Line,int Col); 
	char ImageType[20]; 
	RECT ReallyRectOfBMP; 
	BOOL BMPSelectEnabled; 
	RECT SelectedRect; 
	BOOL  RectSelected; 
	BOOL CopyGrayToShow(void *p_Palette=NULL,void *p_Bits=NULL); 
	BYTE * pBMPBits; 
	RGBQuad * pPalette; 
	DWORD SizeOfMemForShow; 
	BYTE *pBMPDataForShow; 
	LOGPALETTE * pLogPal; 
	BOOL GetBMPPalette(void); 
	CPalette thePalette; 
	BOOL SetPalette(CDC *pDc); 
	BOOL SpeedShowBitMap(CDC *pDc,int Ratio); 
	//CBitmap *pTheBitmap; 
	BOOL GetRectGrayRatio(RECT &rect); 
	void EmptyGrayRatio(void); 
	void GetGrayRatio(void); 
	float GrayRatio[256]; 
	DWORD TotalPoint; 
	DWORD Points[256]; 
	void SetBmpStatus(BOOL OkOrNot); 
	void SetIsGray(BOOL IsOrNot); 
	//void SetIsGray(BOOL IsOrNot); 
	BOOL GetIsGray(void); 
	DWORD mNowHeight; 
	DWORD mNowWidth; 
	void Swap(void *p1,void *p2,int size); 
    BMPInfoHeader BmpInfoHeader; 
	BMPFileHeader BmpFileHeader; 
	BOOL ShowBitMap(CDC *pDc,int Ratio=1); 
	BOOL GetBmpStatus(void); 
	BOOL IsFileOpen(CFile *pFile=NULL);  
	UINT BMPDataSize;//为图形数据分配的内存大小,如图形数据未压缩 
	                 //=BmpInfoHeader.biImageSize;否则, 
	                 //=BmpInfoHeader.biImageSize*2 (bytes) 
    RGBQuad *pRgbQuad; 
	BOOL GetBMPData();     
	BYTE * pBMPData; 
	int NumOfColor; 
	void GetBmpStruct(int ShowMode=1); 
	BmpFile(CString FileName); 
	BmpFile(); 
	virtual ~BmpFile(); 
	BOOL BMP_IsEmpty; 
    CString BMPFileName; 
	INT NonCompressLineSize;//Bytes 
	BOOL GetBmpFile(CString Filename,int ShowMode=1);	 
	BOOL BmpAdjustData(void); 
protected: 
 
	BOOL BMP_Ok; 
private: 
	CPalette *pOldPalette; 
	BOOL IsGray; 
	BOOL IsFirstOpen; 
	BOOL DecodeForRLE_4(void); 
	BOOL DecodeForRLE_8(void); 
	BOOL AskMemoryForBMPData(); 
	BOOL IsBMPFile(void); 
	INT ErrorFlag; 
}; 
 
#endif // !defined(AFX_BMPFILE_H__3BA3F282_1A90_11D4_8C58_A2DB4618981D__INCLUDED_)