129 lines
3 KiB
C++
129 lines
3 KiB
C++
|
|
#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
|
|
#define QR_VRESION_M 1
|
|
#define QR_VRESION_L 2
|
|
|
|
#define MAX_ALLCODEWORD 3706
|
|
#define MAX_DATACODEWORD 2956
|
|
#define MAX_CODEBLOCK 153
|
|
#define MAX_MODULESIZE 177
|
|
|
|
#define QR_MARGIN 0
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
typedef struct tagRS_BLOCKINFO
|
|
{
|
|
int ncRSBlock;
|
|
int ncAllCodeWord;
|
|
int ncDataCodeWord;
|
|
|
|
} RS_BLOCKINFO, *LPRS_BLOCKINFO;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct tagQR_VERSIONINFO
|
|
{
|
|
int nVersionNo;
|
|
int ncAllCodeWord;
|
|
|
|
int ncDataCodeWord[4];
|
|
|
|
int ncAlignPoint;
|
|
int nAlignPoint[6];
|
|
|
|
RS_BLOCKINFO RS_BlockInfo1[4];
|
|
RS_BLOCKINFO RS_BlockInfo2[4];
|
|
|
|
} QR_VERSIONINFO, *LPQR_VERSIONINFO;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
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;
|
|
unsigned char m_byModuleData[MAX_MODULESIZE][MAX_MODULESIZE]; // [x][y]
|
|
|
|
private:
|
|
int m_ncDataCodeWordBit;
|
|
unsigned char m_byDataCodeWord[MAX_DATACODEWORD];
|
|
|
|
int m_ncDataBlock;
|
|
unsigned char m_byBlockMode[MAX_DATACODEWORD];
|
|
int m_nBlockLength[MAX_DATACODEWORD];
|
|
|
|
int m_ncAllCodeWord;
|
|
unsigned char m_byAllCodeWord[MAX_ALLCODEWORD];
|
|
unsigned char m_byRSWork[MAX_CODEBLOCK];
|
|
|
|
public:
|
|
bool EncodeData(int nLevel, int nVersion, bool bAutoExtent, int nMaskingNo, char* lpsSource, int ncSource = 0);
|
|
|
|
private:
|
|
int GetEncodeVersion(int nVersion, char* lpsSource, int ncLength);
|
|
bool 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);
|
|
|
|
bool IsNumeralData(unsigned char c);
|
|
bool IsAlphabetData(unsigned char c);
|
|
bool IsKanjiData(unsigned char c1, unsigned char c2);
|
|
|
|
unsigned char AlphabetToBinaly(unsigned char c);
|
|
unsigned short KanjiToBinaly(unsigned short wc);
|
|
|
|
void GetRSCodeWord(unsigned char * 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_)
|