⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coding.h

📁 电子书《数字图像处理学》Visual C++实现 郎锐编写 所附源码
💻 H
字号:
#if !defined(AFX_CODING_H__DE9DED4A_292C_11D6_B669_0010DCA65D26__INCLUDED_)
#define AFX_CODING_H__DE9DED4A_292C_11D6_B669_0010DCA65D26__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Coding.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CCoding window
#include "dib.h"
#include "DIP_SystemDoc.h"

// 宏运算
#define DWORD_WBYTES(x)         ( (((x) + 31UL) >> 5) << 2 )
#define WORD_WBYTES(x)          ( (((x) + 15UL) >> 4) << 1 )
#define BYTE_WBYTES(x)          (  ((x) +  7UL) >> 3       )

// 常量
#define MAX_BUFF_SIZE           32768 
#define MAX_HASH_SIZE            5051
#define MAX_TABLE_SIZE           4096
#define MAX_SUBBLOCK_SIZE         255

class CCoding : public CWnd
{
// Construction
public:
	CCoding();

// Attributes
public:

	// PCX文件头结构
	typedef struct{
		 BYTE bManufacturer;
		 BYTE bVersion;
		 BYTE bEncoding;
		 BYTE bBpp;
		 WORD wLeft;
		 WORD wTop;
		 WORD wRight;
		 WORD wBottom;
		 WORD wXResolution;
		 WORD wYResolution;
		 BYTE bPalette[48];
		 BYTE bReserved;
		 BYTE bPlanes;
		 WORD wLineBytes;
		 WORD wPaletteType;
		 WORD wSrcWidth;
		 WORD wSrcDepth;
		 BYTE bFiller[54];
	} PCXHEADER;

	// 文件头结构
	typedef struct tagGIF_HEADER{
			BYTE bySignature[3];		// GIF署名
			BYTE byVersion[3];			// 版本号
	} GIFHEADER;	

	// 逻辑屏幕标识符结构
	typedef struct tagGIF_SCRDESC{
			WORD wWidth;				// 逻辑屏幕宽度
			WORD wDepth;				// 逻辑屏幕高度
			struct tagGLOBAL_FLAG{		
					BYTE PalBits   : 3;	// 指定全局调色板的位数
					BYTE SortFlag  : 1;	// 指明全局调色板中RGB颜色值是否经过排序
					BYTE ColorRes  : 3;	// 指定图象色彩分辨率
					BYTE GlobalPal : 1;	// 指定是否具有全局调色板
			} GlobalFlag;
			BYTE byBackground;			// 背景色
			BYTE byAspect;				// 象素宽高比
	} GIFSCRDESC;

	// 图象标识符结构 
	typedef struct tagGIF_IMAGE{
			WORD wLeft;					// X方向偏移量
			WORD wTop;					// Y方向偏移量
			WORD wWidth;				// 图象宽度
			WORD wDepth;				// 图象高度
			struct tagLOCALFLAG{		
		            BYTE PalBits   : 3;	// 局部颜色列表大小
					BYTE Reserved  : 2;	// 保留,必须初始化为0
					BYTE SortFlag  : 1;	// 分类标志
					BYTE Interlace : 1;	// 交织标志
					BYTE LocalPal  : 1;	// 局部颜色列表标志
			} LocalFlag;
	} GIFIMAGE;

	// 图形控制扩展结构 
	typedef struct tagGIF_CONTROL{		 
			BYTE byBlockSize;					// 指定图形控制扩展结构的长度,固定为6
			struct tagFLAG{					
					BYTE Transparency   : 1;	// 透明颜色标志
					BYTE UserInput      : 1;	// 用户输入标志
					BYTE DisposalMethod : 3;	// 处置方法
					BYTE Reserved       : 3;	// 保留
			} Flag;
			WORD wDelayTime;					// 指定进行下一步操作前延迟的时间
			BYTE byTransparencyIndex;			// 指定图象中透明色的颜色索引
			BYTE byTerminator;					// 块终结器,固定为0
	} GIFCONTROL;

	// 图形文本扩展结构
	typedef struct tagGIF_PLAINTEXT{
			BYTE byBlockSize;		// 本扩充块的长度
			WORD wTextGridLeft;		// 文本框离逻辑屏幕的左边界距离
			WORD wTextGridTop;		// 文本框离逻辑屏幕的上边界距离
			WORD wTextGridWidth;	// 文本框宽度
			WORD wTextGridDepth;	// 文本框高度
			BYTE byCharCellWidth;	// 字符单元格宽度
			BYTE byCharCellDepth;	// 字符单元格高度
			BYTE byForeColorIndex;	// 文本前景色索引
			BYTE byBackColorIndex;	// 文本背景色索引
	} GIFPLAINTEXT;

	// 应用程序扩展结构
	typedef struct tagGIF_APPLICATION{
			BYTE byBlockSize;			// 块大小
			BYTE byIdentifier[8];		// 应用程序标识符
			BYTE byAuthentication[3];	// 应用程序鉴别码
	} GIFAPPLICATION;

	typedef struct tagGIF_D_VAR{
			LPBYTE lpDataBuff;
			LPBYTE lpBgnBuff;
			LPBYTE lpEndBuff;
			DWORD dwDataLen;
			WORD  wMemLen;
			WORD  wWidth;
			WORD  wDepth;
			WORD  wLineBytes;
			WORD  wBits;
			BOOL  bEOF;
			BOOL  bInterlace;	
	} GIFD_VAR, FAR* LPGIFD_VAR;

	typedef struct tagGIF_C_VAR{
			LPBYTE lpDataBuff;
			LPBYTE lpEndBuff;
			DWORD dwTempCode;
			WORD  wWidth;
			WORD  wDepth;
			WORD  wLineBytes;
			WORD  wBits;
			WORD  wByteCnt;
			WORD  wBlockNdx;
			BYTE  byLeftBits;
	} GIFC_VAR, FAR *LPGIFC_VAR;

// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CCoding)
	//}}AFX_VIRTUAL

// Implementation
public:
	void OutputCode(CFile &file, WORD wCode, LPBYTE lpbySubBlock, LPBYTE lpbyCurrentBits, LPGIFC_VAR lpGIFCVar);
	void LZW_Encode(LPBYTE lpDIBBits, CFile& file, LPGIFC_VAR lpGIFCVar, WORD wWidthBytes, BOOL bInterlace);
	void LZW_Decode(CFile& file, LPBYTE lpDIBBits, LPGIFD_VAR lpGIFDVar, WORD wWidthBytes);
	BOOL DIBToGIF(HDIB hDIB, CFile& file, BOOL bInterlace);
	HDIB GIFToDIB(CFile& file);
	void ReadGIF(CFile& file, LPWORD lpwMemLen, LPDWORD lpdwDataLen, LPBYTE lpSrcBuff, LPBOOL lpbEOF);
	BOOL Huffman(HDIB hDIB, CString strPath);
	BOOL Shannon_Fannon(HDIB hDIB,CString strPath);
	BOOL DIBToPCX(HDIB hDIB, CString strPath);
	HDIB PCXToDIB(CString strPath);
	void SaveBMP(CString fileName, BYTE * buf, UINT width, UINT height);
	BYTE* LoadBMP(CString fileName, UINT *width, UINT *height);
	void LoadJPG(HDIB hDIB, CDIP_SystemDoc* pDoc, CString fileName);
	void SaveJPG(CDIP_SystemDoc* pDoc, CString fileName);
	virtual ~CCoding();

	// Generated message map functions
protected:
	CDIB m_clsDIB;
	//{{AFX_MSG(CCoding)
		// NOTE - the ClassWizard will add and remove member functions here.
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CODING_H__DE9DED4A_292C_11D6_B669_0010DCA65D26__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -