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

📄 decompressdoc.h

📁 这是用提升小波变换与嵌入零树编码实现的256色灰度BMP图像压缩与解压缩的程序。
💻 H
字号:
// DecompressDoc.h : interface of the CDecompressDoc class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_DECOMPRESSDOC_H__7EC3AE93_9B07_4C9A_8826_A06F61703B40__INCLUDED_)
#define AFX_DECOMPRESSDOC_H__7EC3AE93_9B07_4C9A_8826_A06F61703B40__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <afxtempl.h>
#include "Fractal.h"
#include "AC_Code.h"
#include "fstream.h"

class CDecompressDoc : public CDocument
{
protected: // create from serialization only
	CDecompressDoc();
	DECLARE_DYNCREATE(CDecompressDoc)

// Attributes
public:
	BITMAPINFOHEADER bi;  //图像信息头
	RGBQUAD* quad;  //调色板
	BYTE* lpBuf;  //图像数据缓存
	BITMAPINFO* pbi;   //图像信息
	int flag;  //是否打开了BMP文件
	int numQuad;  //调色板数目
	BYTE* lpshowbuf;  //图像显示缓存
	BITMAPFILEHEADER bf;  //图象文件头
    int scale;  //变换层数
	int** Coefficient; //小波变换后的系数
	CArray <BYTE,BYTE> code;  //EZW编码所得编码结果
	int codeId;
	int JiFlag;   //所用的小波基是Haar还是D97,0代表Haar,1代表D97
// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CDecompressDoc)
	public:
	virtual BOOL OnNewDocument();
	virtual void Serialize(CArchive& ar);
	//}}AFX_VIRTUAL

// Implementation
public:
	void FBAC_Code_En(CArray <BYTE,BYTE> &biao);
	void ZhBAC_Code_En(CArray <BYTE,BYTE> &biao);
	void FractalEncode(int height,int width,int flag,int orientation,int CodeLength);
	void OnPsnr(int length);
	void DeD97Four();
	void DeHaarFour();
	void Four_ToLpshowbuf(int **OneImage, int **SecondImage, int **ThreeImage, int** FourImage, int *max, int *min);
	void ChangeImage(int** image);
	void SetLineCoefficient(int **date, int **s, int **d, int height, int width);
	void D97Forecast(int** s, int** d, int height, int width);
	void RowSplit(int** data, int** s, int** d, int height, int width);
	void HaarForecast(int** s, int** d, int height, int width); //Haar变换中的行预测
	void LineSplit(int** data, int** s, int** d, int height, int width);
	void DeD97Three();
	void DeD97Two();
	void DeD97One();
	void DeD97Trans(int height, int width, int** date);  //D97逆变换
	void DeHaarThree(); //Haar一次逆变换
	void DeHaarTwo(); //Haar二次逆变换
	void DeHaarTrans(int height, int width, int** date);//Haar三次逆变换
	void DeHaarOne();//Haar逆变换
	void SetRowCoefficient(int **date, int **s, int **d, int height, int width);  //把经过EZW解码的系数赋给要做小波逆变换的矩阵
	void DeSetZeroTree(CNode **AllNode, int x, int y);  //解码中的设置零树上节点的标志位
	void EZWDecode(int T, CNode** AllNode, CArray <BYTE,BYTE> &zhubiao, CArray <BYTE,BYTE> &fubiao, int t); //EZW解码逆量化
	void RunLength_En(CArray <BYTE,BYTE> &biao);  //行程长度编码
	void EZWEncode(int T, CArray <BYTE,BYTE> &zhubiao, CArray <BYTE,BYTE> &fubiao); //对经EZW扫描后的码继续进行无损编码
	int SecondScan(CNode **AllNode, int T, CArray<BYTE,BYTE> &zhubiao, CArray<BYTE,BYTE> &fubiao, CArray<int,int> &zhycoeff,int ScanFlag,int length); //EZW扫描
	void Order(CArray<int,int> &zhycoeff, int length,int min, int max); //重排函数
	bool LiangHuaQi(int coeff, int min, int max);  //量化器
	void ChangeMatrix();
	void SetZeroTree(CNode** AllNode, int x, int y); //设置零树上的节点的标志位
	int CheckZeroTree(CNode **AllNode, int x, int y, int T); //检测该节点的子孙节点,即检测是否是零树
	
	void GetCoefficient(int** date, int height, int width);  //把经过小波变换的系数赋给要做EZW编码的矩阵
	
	
	void D97Trans(int height, int width, int **data, int *max, int *min);
	void Three_ToLpshowbuf(int **OneImage, int **SecondImage, int **ThreeImage, int *max, int *min);
	void Two_ToLpshowbuf(int **OneImage, int **SecondImage, int *max, int *min);
	void One_ToLpshowbuf(int **OneImage, int *max, int *min);
	void HaarTrans(int height, int width, int **data, int *max, int *min);
	BOOL PrepareShowdata();
	virtual ~CDecompressDoc();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CDecompressDoc)
	afx_msg void OnFileOpen();
	afx_msg void OnFileClose();
	afx_msg void OnHaarOne();
	afx_msg void OnHaarTwo();
	afx_msg void OnHaarThree();
	afx_msg void OnD97One();
	afx_msg void OnD97Two();
	afx_msg void OnD97Three();
	afx_msg void OnFileSaveAs();
	afx_msg void OnEZWEncode();
	afx_msg void OnEZWDecode();
	afx_msg void OnHaarFour();
	afx_msg void OnD97Four();
	afx_msg void OnFourFind();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

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

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

#endif // !defined(AFX_DECOMPRESSDOC_H__7EC3AE93_9B07_4C9A_8826_A06F61703B40__INCLUDED_)

⌨️ 快捷键说明

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