用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

146 lines
4.4 KiB

// QR_Encode.h : CQR_Encode 僋儔僗愰尵偍傛傃僀儞僞乕僼僃僀僗掕媊
// Date 2006/05/17 Ver. 1.22 Psytec Inc.
#if !defined(AFX_QR_ENCODE_H__AC886DF7_C0AE_4C9F_AC7A_FCDA8CB1DD37__INCLUDED_)
#define AFX_QR_ENCODE_H__AC886DF7_C0AE_4C9F_AC7A_FCDA8CB1DD37__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// 掕悢
// 更正水平
#define QR_LEVEL_L 0
#define QR_LEVEL_M 1
#define QR_LEVEL_Q 2
#define QR_LEVEL_H 3
// /数据模式
#define QR_MODE_NUMERAL 0
#define QR_MODE_ALPHABET 1
#define QR_MODE_8BIT 2
#define QR_MODE_KANJI 3
// 版本(模型)组
#define QR_VRESION_S 0 // 1~9
#define QR_VRESION_M 1 // 10 ~ 26
#define QR_VRESION_L 2 // 27 ~ 40
#define MAX_ALLCODEWORD 3706 // 最大的码字总数
#define MAX_DATACODEWORD 2956 // 最大数据码字(版本40 - L)的
#define MAX_CODEBLOCK 153 // 最大数量 Burokkudetakodowado(RS码字等)
#define MAX_MODULESIZE 177 // 模块的最大数量的边
// 绘制位图在边际
#define QR_MARGIN 4
/////////////////////////////////////////////////////////////////////////////
typedef struct tagRS_BLOCKINFO
{
int ncRSBlock; // 遥感块
int ncAllCodeWord; // 块的码字
int ncDataCodeWord; // 数字数据码字(字数的代码 - RS码字数)
} RS_BLOCKINFO, *LPRS_BLOCKINFO;
/////////////////////////////////////////////////////////////////////////////
// QR码版本(模型)的信息
typedef struct tagQR_VERSIONINFO
{
int nVersionNo; // 版本(型号)的数量(1-40)
int ncAllCodeWord; // 总人数的码字
// 下面是一个数组索引错误矫正率 (0 = L, 1 = M, 2 = Q, 3 = H)
int ncDataCodeWord[4]; //数据码字(码字数量的总数 - RS码字数)
int ncAlignPoint; // 数字坐标Araimentopatan
int nAlignPoint[6]; // 中心坐标Araimentopatan
RS_BLOCKINFO RS_BlockInfo1[4]; // 遥感信息块(1)
RS_BLOCKINFO RS_BlockInfo2[4]; // 遥感块信息(2)
} QR_VERSIONINFO, *LPQR_VERSIONINFO;
/////////////////////////////////////////////////////////////////////////////
// CQR_Encode 僋儔僗
class CQR_Encode
{
// 峔抸/徚柵
public:
CQR_Encode();
~CQR_Encode();
public:
int m_nLevel; //错误更正水平
int m_nVersion; // 版本(型号)
BOOL m_bAutoExtent; // 版本(型号)标志指定自动扩展
int m_nMaskingNo; // /掩蔽模式的数量
public:
int m_nSymbleSize;
BYTE m_byModuleData[MAX_MODULESIZE][MAX_MODULESIZE]; // [x][y]
// Bit5:功能模块(不包括由掩蔽)标志
// Bit4:显示数据的功能模块
// 04期Bit1:编码数据
// Bit0:经过编码掩模图形数据
//通过逻辑和功能模块,11小时,并提请逻辑(布尔和最终的判断20小时)
private:
int m_ncDataCodeWordBit; // 长度Detakodowadobitto
BYTE m_byDataCodeWord[MAX_DATACODEWORD]; // 输入Detaenkodoeria
int m_ncDataBlock;
BYTE m_byBlockMode[MAX_DATACODEWORD];
int m_nBlockLength[MAX_DATACODEWORD];
int m_ncAllCodeWord; // 总人数的码字(遥感数据,包括错误修正)
BYTE m_byAllCodeWord[MAX_ALLCODEWORD]; // / /计算总面积三字代码
BYTE m_byRSWork[MAX_CODEBLOCK]; // RS码字计算工作
// 功能相关的数据编码
public:
BOOL EncodeData(int nLevel, int nVersion, BOOL bAutoExtent, int nMaskingNo, LPCSTR lpsSource, int ncSource = 0);
private:
int GetEncodeVersion(int nVersion, LPCSTR lpsSource, int ncLength);
BOOL EncodeSourceData(LPCSTR lpsSource, int ncLength, int nVerGroup);
int GetBitLength(BYTE nMode, int ncData, int nVerGroup);
int SetBitStream(int nIndex, WORD wData, int ncData);
BOOL IsNumeralData(unsigned char c);
BOOL IsAlphabetData(unsigned char c);
BOOL IsKanjiData(unsigned char c1, unsigned char c2);
BYTE AlphabetToBinaly(unsigned char c);
WORD KanjiToBinaly(WORD wc);
void GetRSCodeWord(LPBYTE lpbyRSWork, int ncDataCodeWord, int ncRSCodeWord);
// 功能模块相关的安置
private:
void FormatModule();
void SetFunctionModule();
void SetFinderPattern(int x, int y);
void SetAlignmentPattern(int x, int y);
void SetVersionPattern();
void SetCodeWordPattern();
void SetMaskingPattern(int nPatternNo);
void SetFormatInfoPattern(int nPatternNo);
int CountPenalty();
};
/////////////////////////////////////////////////////////////////////////////
#endif // !defined(AFX_QR_ENCODE_H__AC886DF7_C0AE_4C9F_AC7A_FCDA8CB1DD37__INCLUDED_)