123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- // QR_Encode.h : CQR_Encode クラス宣言およびインターフェイス定義
- // Date 2006/05/17 Ver. 1.22 Psytec Inc.
- #ifndef _QR_ENCODE_H
- #define _QR_ENCODE_H
- #include <string.h>
- #include <stdlib.h>
- /////////////////////////////////////////////////////////////////////////////
- // 定数
- // 誤り訂正レベル
- #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 // ブロックデータコードワード数最大値(RSコードワードを含む)
- #define MAX_MODULESIZE 177 // 一辺モジュール数最大値
- // ビットマップ描画時マージン
- #define QR_MARGIN 4
- /////////////////////////////////////////////////////////////////////////////
- typedef struct tagRS_BLOCKINFO
- {
- int ncRSBlock; // RSブロック数
- 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; // アライメントパターン座標数
- int nAlignPoint[6]; // アライメントパターン中心座標
- RS_BLOCKINFO RS_BlockInfo1[4]; // RSブロック情報(1)
- RS_BLOCKINFO RS_BlockInfo2[4]; // RSブロック情報(2)
- } QR_VERSIONINFO, *LPQR_VERSIONINFO;
- typedef unsigned short WORD;
- typedef unsigned char BYTE;
- typedef BYTE* LPBYTE;
- typedef const char* LPCSTR;
- #define ZeroMemory(Destination,Length) memset((Destination),0,(Length))
- 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:機能モジュール描画データ
- // bit1:エンコードデータ
- // bit0:マスク後エンコード描画データ
- // 20hとの論理和により機能モジュール判定、11hとの論理和により描画(最終的にはbool値化)
- private:
- int m_ncDataCodeWordBit; // データコードワードビット長
- BYTE m_byDataCodeWord[MAX_DATACODEWORD]; // 入力データエンコードエリア
- int m_ncDataBlock;
- BYTE m_byBlockMode[MAX_DATACODEWORD];
- int m_nBlockLength[MAX_DATACODEWORD];
- int m_ncAllCodeWord; // 総コードワード数(RS誤り訂正データを含む)
- 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
|