📄 bmpproc.h
字号:
///////////////////////////////////////////////////////////////////////
/*
目的:BMP位图处理类。(定义文件)
创建:张伟(SXZ)
日期:2000.01
版本:2.4
SXZ software workgroup. No.200001
*/
///////////////////////////////////////////////////////////////////////
#ifndef __BMPPROC_H__
#define __BMPPROC_H__
/* 版本 */
#define BMPPROC_VERSION 0x240
// DIBSCANLINE_WIDTHBYTES 执行DIB扫描行的DWORD对齐操作。宏参数“bits”是
// DIB信息结构中成员biWidth和biBitCount的乘积。宏的结果是经过对齐后一个
// 扫描行所占的字节数。
#define DIBSCANLINE_WIDTHBYTES(bits) (((bits)+31)/32*4)
// DDBSCANLINE_WIDTHBYTES 执行DDB扫描行的WORD对齐操作。宏参数“bits”是
// DDB信息结构中成员bmWidth和bmBitCount的乘积。宏的结果是经过对齐后一个
// 扫描行所占的字节数。
#define DDBSCANLINE_WIDTHBYTES(bits) (((bits)+15)/16*2)
/* DIB 文件头标志("BM") */
#define DIB_HEADER_MARKER ((WORD)('M'<<8)|'B')
// 常用颜色定义
#define CBPCOLOR_BLACK ((COLORREF)RGB(0,0,0))
#define CBPCOLOR_GRAY ((COLORREF)RGB(128,128,128))
#define CBPCOLOR_HIGHGRAY ((COLORREF)RGB(192,192,192))
#define CBPCOLOR_WHITE ((COLORREF)RGB(255,255,255))
#define CBPCOLOR_RED ((COLORREF)RGB(255,0,0))
#define CBPCOLOR_GREEN ((COLORREF)RGB(0,255,0))
#define CBPCOLOR_BLUE ((COLORREF)RGB(0,0,255))
// 注意:类CBmpProc是从CBitmap类公有继承而来的,但最好不要使用类CBitmap
// 中的函数!如果使用了(尤其是读入或创建型的函数),则就不要再使用CBmpProc
// 类中的函数,以免混乱。
class CBmpProc : public CBitmap
{
public:
CBmpProc();
~CBmpProc();
BOOL Create(int width, int height, WORD nBitCount, const void *lpBits=NULL);
BOOL Create(CSize size, WORD nBitCount, const void *lpBits=NULL);
BOOL CreateCompatible(int width, int height, CDC *pDC=NULL, const void *lpBits=NULL);
BOOL CopyFromObject(CBmpProc& souBmp, CRect *pDesRect=NULL, CRect *pSouRect=NULL);
BOOL CopyFromHbmp(HBITMAP souBmp, CRect *pDesRect=NULL, CRect *pSouRect=NULL);
BOOL CopyTran(CBmpProc& souBmp, COLORREF crColour=CBPCOLOR_WHITE,
CRect *pDesRect=NULL, CRect *pSouRect=NULL, int mode=0);
BOOL CopyTran(CBmpProc& souBmp, COLORREF crColour=CBPCOLOR_WHITE,
int x=0, int y=0, CRect *pSouRect=NULL, int mode=0);
BOOL CopyTranCenter(CBmpProc& souBmp, CRect* crArea=NULL,
COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
BOOL CopyTranTile(CBmpProc& souBmp, CRect* crArea=NULL,
COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
BOOL LoadFromFile(LPCTSTR lpszPathName);
BOOL LoadFromResourceID(UINT uID, HINSTANCE hInst);
BOOL LoadFromResourceName(LPCTSTR lpResourceName, HINSTANCE hInst);
BOOL LoadFromObject(CBmpProc& souBmp, CRect *pSouRect=NULL);
BOOL LoadFromHbmp(HBITMAP sou, CRect *pSouRect=NULL);
BOOL LoadFromClipboard();
BOOL Save(LPCTSTR lpszNewFileName=NULL, WORD nBitsPerPixel=0);
BOOL SaveToClipboard();
BOOL Draw(CDC& dc, const CRect* rcDst=NULL, const CRect* rcSrc=NULL);
BOOL DrawTile(CDC& dc, CRect* crArea);
BOOL DrawCenter(CDC& dc, CRect* crArea);
BOOL DrawTransparentInRect(CDC& dc, COLORREF crColour=CBPCOLOR_WHITE,
CRect* crDest=NULL, CRect* crSou=NULL, int mode=0);
BOOL DrawTransparentInPoint(CDC& dc, COLORREF crColour=CBPCOLOR_WHITE,
int x=0, int y=0, CRect* crSou=NULL, int mode=0);
BOOL DrawTranCenter(CDC& dc, CRect* crArea, COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
BOOL DrawTranTile(CDC& dc, CRect* crArea, COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
BOOL Attach(HBITMAP hBmp);
HBITMAP Detach();
void Clear();
HRGN ExportRegion(COLORREF cTranColor=CBPCOLOR_WHITE);
BOOL Fill(COLORREF crColour=CBPCOLOR_WHITE, CRect *crArea=NULL);
BOOL ReSetColor(COLORREF oldcolr, COLORREF newcolr, CRect *crArea=NULL);
// 重载操作符函数
CBmpProc& operator=(const CBmpProc& ds);
CBmpProc& operator=(const HBITMAP sou);
BOOL operator==(const CBmpProc& ds);
BOOL operator!=(const CBmpProc& ds);
operator HBITMAP() const { return (HBITMAP)m_hObject; };
// 类数据访问函数
CSize Size() const;
CRect Rect() const;
int Width() const;
int Height() const;
int ScanWidth() const;
int BitsPerPixel() const;
BOOL IsValid() const;
//访问类内部数据的介面函数
int GetImageType() const;
DWORD GetInAddInfo() const;
const CString& GetFileName() const;
BOOL SetFileName(LPSTR pSou);
int GetObject(LPBITMAP lpBitmap) const;
HANDLE GetHDib() const;
WORD GetVersion() const;
#ifdef _DEBUG
static DWORD GetObjectCount() {return m_ObjectCount;};
#endif
protected:
// 助手函数(与类无关)
LPSTR FindDIBBits(LPSTR lpbi) const;
DWORD DIBWidth(LPBITMAPINFOHEADER lpbi) const;
DWORD DIBHeight(LPBITMAPINFOHEADER lpbi) const;
WORD PaletteSize(LPBITMAPINFOHEADER lpbi) const;
WORD DIBNumColors(LPBITMAPINFOHEADER lpbi) const;
int GetBitsPerPixel(LPBITMAPINFOHEADER lpbi) const;
LPVOID CreateMemoryBlockFromHandle(HANDLE handle, DWORD dwCount=0);
LPVOID CreateMemoryBlockFromAddress(LPVOID pSou, DWORD dwCount=0);
BOOL IsValidBmpFile(CFile& file);
LPBITMAPINFO GetBmpFileInfo(CFile& file);
LPSTR GetBmpFileBits(CFile& file);
BOOL IsValidDibFormat(WORD nBitsPerPixel);
BOOL IsFileExist(LPCTSTR lpFileName);
DWORD CalculateDIBFileSize(LPBITMAPINFOHEADER lpbi) const;
DWORD CalculateDIBSize(LPBITMAPINFOHEADER lpbi) const;
DWORD CalculateDIBitsOff(LPBITMAPINFOHEADER lpbi) const;
DWORD CalculateDIBInfoSize(LPBITMAPINFOHEADER lpbi) const;
DWORD CalculateDIBitsSize(LPBITMAPINFOHEADER lpbi) const;
BOOL PasteAvailable();
// 内部服务函数(与类有关)
BOOL SaveBaseSpecifyFileName(LPCTSTR fn);
BOOL SaveBaseSpecifyFormat(WORD nBitsPerPixel);
LPBITMAPINFO GetSpecifyFormatInfo(WORD newBitCount=0);
BOOL ClearAndSetData(int type, DWORD addinfo, LPCTSTR lpFn, LPBITMAPINFO pInfo, HBITMAP hBmp);
public:
enum // 位图的初始来源类型:
{
IT_NULL, // 无位图类型
IT_DISKFILE, // 文件位图
IT_RESOURCE, // 资源位图
IT_MEMORY, // 内存位图
IT_CLIP, // 剪贴板位图
IT_CREATE // 创建型位图
};
private:
// 数据成员
BOOL m_mark; // 类的有效标志。(TRUE-本类中有位图,
// FALSE-本类中没有位图)
int m_type; // 图像类型,只能使用上面枚举类型值
DWORD m_addInfo; // 附加信息。
CString m_cFileName;// 文件路径。
LPBITMAPINFO m_pInfo; // DIB 信息结构
#ifdef _DEBUG
static DWORD m_ObjectCount; // 本类构造的实例目标个数,供调试使用
#endif
};
#define MID_SEP 1
#define MID_PRIMSG 2
#define MID_ADDUSER 3
#define MID_DELUSER 4
#define MID_USERID 5
#define MID_PUBLICMSG 6
#define MID_MAX 10
#define MID_MOVE 11
#define MID_SENTENCE 12
#define MID_TURN 13
#define MID_SMILE 14
#define MID_ANGRY 15
#define MID_SIT 16
#define MID_CRY 17
#define MID_STAND 18
#define MID_HELLO 19
#define MID_VISIT 20
class muser
{
public:
UINT m_state;
UINT m_pic;
UINT m_x;
UINT m_y;
UINT m_nPort;
CString m_Name;
BOOL m_bSit;
CString m_Sex;
CString m_Address;
CString m_ICQ;
CString m_Job;
UINT m_nAge;
CString m_IP;
UINT m_ID;
CString m_Sen;
muser(){
m_state=0;
m_pic=0;
m_x=0;
m_y=0;
m_Name="";
m_bSit=FALSE;
m_ID=0;
};
void serstate(CArchive& ar)
{
if(ar.IsStoring())
ar<<(DWORD)m_x<<(DWORD)m_y<<(DWORD)m_state<<(DWORD)m_bSit;
else
{
DWORD wd;
ar>>wd;m_x=(UINT)wd;
ar>>wd;m_y=(UINT)wd;
ar>>wd;m_state=(UINT)wd;
ar>>wd;m_bSit=(BOOL)wd;
}
};
void serUser(CArchive& ar)
{
if(ar.IsStoring())
ar<<(DWORD)m_ID<<(DWORD)m_pic<<m_Name<<m_IP<<m_Sex<<(DWORD)m_nAge<<m_ICQ<<m_Job<<m_Address<<m_nPort;
else
{
DWORD wd;
ar>>wd;m_ID=(UINT)wd;
ar>>wd;m_pic=(UINT)wd;
ar>>m_Name;
ar>>m_IP;
ar>>m_Sex;
ar>>wd;m_nAge=(UINT)wd;
ar>>m_ICQ;
ar>>m_Job;
ar>>m_Address;
ar>>wd;m_nPort=(UINT)wd;
}
// serstate(ar);
};
void serID(CArchive& ar)
{
if(ar.IsStoring())
ar<<(DWORD)m_ID;
else
{
DWORD wd;
ar>>wd;m_ID=(UINT)wd;
}
// serstate(ar);
};
};
class mcom :public muser
{
public:
UINT m_ComID;
mcom(){
m_ComID=0;
};
void ser(CArchive& ar)
{
if(ar.IsStoring())
{
ar<<(DWORD)m_ComID;
if(m_ComID==MID_SENTENCE)
ar<<m_Sen;
}
else
{
DWORD wd;
ar>>wd;m_ComID=(UINT)wd;
if(m_ComID==MID_SENTENCE)
ar>>m_Sen;
}
muser::serID(ar);
muser::serstate(ar);
};
};
class CUserInfo;
class mpack :public mcom
{
public:
mpack(){
m_AimUserID=0;
m_MsgID=0;
m_SenderID=0;
};
UINT m_MsgID;
UINT m_AimUserID;
static UINT m_OldID;
static UINT m_Number;
UINT m_SenderID;
UINT m_num;
void create()
{
m_Number=(m_Number+1)%30;
m_num=m_Number;
m_SenderID=m_OldID;
};
void ser(CArchive& ar)
{
if(ar.IsStoring())
{
ar<<(DWORD)m_SenderID<<(DWORD)m_num<<(DWORD)m_MsgID;
if(m_MsgID==MID_PRIMSG)
ar<<(DWORD)m_AimUserID;
}
else
{
DWORD wd;
ar>>wd;m_SenderID=(UINT)wd;
ar>>wd;m_num=(UINT)wd;
ar>>wd;m_MsgID=(UINT)wd;
if(m_MsgID==MID_PRIMSG)
{
ar>>wd;
m_AimUserID=(UINT)wd;
}
}
switch(m_MsgID)
{
case(MID_PUBLICMSG):
case(MID_PRIMSG):
mcom::ser(ar);
break;
case(MID_USERID):
case(MID_DELUSER):
serID(ar);
break;
case(MID_ADDUSER):
serUser(ar);
serstate(ar);
break;
default:
break;
}
};
};
class serverInfo{
public:
CString m_RoomName;
CString m_ServerName;
CString m_ServerPort;
};
class WebServer{
public:
CString m_Webname;
CString m_Web;
CString m_show;
CString m_get;
};
#endif /*__BMPPROC_H__*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -