📄 membitmap.h
字号:
#ifndef WMEMBITMAP
#define WMEMBITMAP
#include "math.h"
#define PIE 3.1415925
//支持按位取数据的操作,返回字节
class BitData
{
public:
BYTE *Data;
long int BytePtr;
long int BufLen;
int BitPtr;
BOOL flag;
BYTE CurByte;
BYTE step;
// BYTE CNT;
public:
BitData();
BitData(BYTE *buf,long int lenth);
BOOL GetBit(int bits,BYTE &Value);
BOOL GetBit(BYTE& Value);
// BYTE GetBit(long int byteptr,int bitptr,int bits);
~BitData();
};
typedef class memBitmap
{
private:
LPBITMAPFILEHEADER bFileHeader;
LPBITMAPINFOHEADER bInfoHeader;
LPBITMAPINFO bBMI;
int flag;
float Scale;
unsigned char *bitData;
private:
BOOL TagFlag;//标志是否为文件交换格式
int ImageWidth,ImageHeight; //图象宽和高
BYTE CnNum; //成分个数
BYTE CnTable[10]; //成分编号
BYTE CnHSample[10]; //成分水平采样比例
BYTE CnVSample[10]; //成分垂直采样比例
BYTE QuanNum[10]; //成分量化表编号
BYTE CnDCHuffNum[10];//成分DC分量霍夫曼表的编号
BYTE CnACHuffNum[10];//成分AC分量霍夫曼表的编号
BYTE QuanTable[4][64]; //量化表
int ReEnterInterval; //重入间隔
int HuffDCTable[2][256];//霍夫曼表
BYTE HuffDCBits[2][16]; //n位霍夫曼码的个数
BYTE HuffDCVar[2][256]; //霍夫曼值
BYTE HuffDCPtr[2][16]; //霍夫曼指针,表长度为n的霍夫曼码在表中启始位置
int HuffDCMinCode[2][16]; //长度为n的霍夫曼码的最小值
int HuffDCMaxCode[2][16]; //长度为n的霍夫曼码的最大值
//以上为直流系数的数据,以下为交流系数的数据
int HuffACTable[2][256];//霍夫曼表
BYTE HuffACBits[2][16]; //n位霍夫曼码的个数
BYTE HuffACVar[2][256]; //霍夫曼值
BYTE HuffACPtr[2][16]; //霍夫曼指针,表长度为n的霍夫曼码在表中启始位置
int HuffACMinCode[2][16]; //长度为n的霍夫曼码的最小值
int HuffACMaxCode[2][16]; //长度为n的霍夫曼码的最大值
long int JpegLenth;
private:
int MCUnumber;
int xRes;
int yRes;
int MCUcount;
long int Pred[3]; //存放前一个直流分量的Pred
double DctVar1[8][8];
double DctVar2[8][8];
double IDct[3][10][8][8];
private:
BOOL EnCode(BitData &Jpeg);
BOOL EnCodeMCU(BitData &Jpeg,BYTE CnNum,BYTE MCUnum);
public:
int BytesPerLine;
unsigned long int lenth;
unsigned char *bData;
public:
memBitmap();
memBitmap(int cx,int cy,class memBitmap &bm);
BOOL CreateDirect(int cx,int cy);
BOOL Load(LPCTSTR filename);
BOOL Save(LPCTSTR filename);
void Display(int x,int y,CDC *dc);
void Display(int x,int y,int cx,int cy,CDC *dc);
int GetWidth();
int GetHeight();
void SetWidth(int w);
void SetHeight(int h);
int GetDispWidth();
int GetDispHeight();
void SetScale(int bl);
void SetScale(float bl);
BOOL ChangeSize(int cx,int cy);
float GetScale();
COLORREF GetPixel(int x,int y);
void SetPixel(int x,int y,COLORREF color);
void operator=(class memBitmap &bm);
void DataToView(class memBitmap &bm);//生成显示用的其他比例文件
void Release();
BOOL JpegToBmp(BYTE *buf,long int lenth);
~memBitmap();
}memBITMAP;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -