Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

113 linhas
3.8 KiB

#ifndef __QRENCODE_H
#define __QRENCODE_H
#include "data_type.h"
//#include "type.h"
//#ifndef BYTE
//typedef unsigned char  BYTE;
//#endif
//#ifndef WORD
//	typedef unsigned int  WORD;
//#endif
//typedef enum {FALSE = 0, TRUE = !FALSE} unsigned char;
#define min(a,b)	(((a) < (b)) ? (a) : (b))
//4种纠错等级,可恢复的码字比例为:
#define QR_LEVEL_L	0	//7%的字码可被修正
#define QR_LEVEL_M	1	//15%的字码可被修正
#define QR_LEVEL_Q	2	//25%的字码可被修正
#define QR_LEVEL_H	3	//30%的字码可被修正
//编码形式
#define QR_MODE_NUMERAL		0
#define QR_MODE_ALPHABET	1
#define QR_MODE_8BIT		2
#define QR_MODE_KANJI		3
#define QR_MODE_CHINESE		4
//Number of bits per length field
//Encoding		Ver.1–9		10–26		27–40
//Numeric		10			12			14
//Alphanumeric	9			11			13
//Byte			8			16			16
//Kanji			8			10			12 
//Chinese		
//P17 字符计数指示的位数
#define QR_VRESION_S	0 
#define QR_VRESION_M	1 
#define QR_VRESION_L	2 
#define QR_MARGIN	4
#define	QR_VER1_SIZE	21// 版本的行列数
#define MAX_ALLCODEWORD		400//3706//400// //P14,P35 数据容量[码字]* (E) (VER:40), 所有码字为8位
#define MAX_DATACODEWORD	400//2956//400// //P27     最大信息码子(Ver:40-L),所有码字为8位
#define MAX_CODEBLOCK		153	//最大纠错码字 Ver:36.37.38_L_第二块
#define MAX_MODULESIZE			177//用来存储生成二维码数据的数组
//#define MAX_MODULESIZE		33// 21:Version=1,最大字符=17(8.5个汉字)
								// 25:Version=2,最大字符=32(16个汉字)
								// 29:Version=3,最大字符=49(24.5个汉字)
								// 33:Version=4,最大字符=78(39个汉字)
								// 37:Version=5,最大字符=106(53个汉字) 
								// 41:Version=6,最大字符=134(67个汉字)
							 	// 45:Version=7,最大字符=154(77个汉字)
							 	// 49:Version=8,最大字符=192(96个汉字)
								// 53:
//#define	MAX_MODULESIZE	177//P14 每边的模块数(A) (VER:40   ) Ver:40 = 21+(Ver-1)*4
extern int m_nSymbleSize;
extern unsigned char	 m_byModuleData[MAX_MODULESIZE][MAX_MODULESIZE];
/////////////////////////////////////////////////////////////////////////////
typedef struct 
{
	unsigned short  int	 ncRSBlock;		//纠错的块数
	unsigned short  int	 ncAllCodeWord;	//码字总数
	unsigned short  int	 ncDataCodeWord;	//指定纠错等级下的数据码字数
}RS_BLOCKINFO;
typedef struct 
{
	unsigned short  int	 nVersionNo;			//ver 1~40
	unsigned short  int	 ncAllCodeWord; 		//码字总数=数据码字+纠错码字
	unsigned short  int	 ncDataCodeWord[4];	//指定纠错等级下的数据码字(0=L,1=M,2=Q,3=H)
	unsigned short  int	 ncAlignPoint;		//P61 表E1 校正图形 个数
	unsigned short  int	 nAlignPoint[6];		//P61 表E1 校正图形	行列坐标
	//(0=L,1=M,2=Q,3=H)
	RS_BLOCKINFO RS_BlockInfo1[4];	//纠错块1
	RS_BLOCKINFO RS_BlockInfo2[4];	//纠错块2
}QR_VERSIONINFO;
unsigned char EncodeData(char *lpsSource);
int GetEncodeVersion(int nVersion, char *lpsSource, int ncLength);
//unsigned char EncodeSourceData(char *lpsSource, int ncLength, int nVerGroup);
int EncodeSourceData(char *lpsSource, int ncLength, int nVerGroup);
int GetBitLength(unsigned char	 nMode, int ncData, int nVerGroup);
int SetBitStream(int nIndex, unsigned short wData, int ncData);
unsigned char IsNumeralData(unsigned char c);
unsigned char IsAlphabetData(unsigned char c);
unsigned char IsKanjiData(unsigned char c1, unsigned char c2);
unsigned char IsChineseData(unsigned char c1, unsigned char c2);
	
unsigned char	 AlphabetToBinaly(unsigned char c);
unsigned short KanjiToBinaly(unsigned short wc);
unsigned short ChineseToBinaly(unsigned short wc);
void GetRSCodeWord(unsigned char	 *lpbyRSWork, int ncDataCodeWord, int ncRSCodeWord);
void FormatModule(void);
void SetFunctionModule(void);
void SetFinderPattern(int x, int y);
void SetAlignmentPattern(int x, int y);
void SetVersionPattern(void);
void SetCodeWordPattern(void);
void SetMaskingPattern(int nPatternNo);
void SetFormatInfoPattern(int nPatternNo);
int CountPenalty(void);
void Print_2DCode(void);
void qr_code1(char *lpsSource,unsigned short x,unsigned short y,unsigned short m);
#endif