UINT CQRCodeEncode::EncodeQRCode () { int iRet; int iMinPenalty = 0; int iPenalty = 0; int iWidthLength; int iWordSize; CQRCodeSymbol *pSymbol; CQRCodeMask *pMask; CQRCodeDisposition *pDisposition; SetFunctionModule (); pDisposition = new CQRCodeDisposition; iWordSize = QR_VersonInfo[m_iVersion].ncAllCodeWord; iRet = pDisposition->SetCodeWordPattern (m_szEncodeData, m_uiEncodeDataSize , iWordSize , m_iSymbolSize, m_iRSLevel); delete pDisposition; if(RESULT_OK != iRet) { return 0; } pMask = new CQRCodeMask; if (m_iMaskPattern == -1) { m_iMaskPattern = MIN_MASK_NUMBER; pMask->SetMaskQRCode (m_iMaskPattern, m_iVersion); iMinPenalty = CountPenalty(); for (int i = 1; i <= MAX_MASK_NUMBER; ++i) { pMask->SetMaskQRCode (i, m_iVersion); iPenalty = CountPenalty(); if (iPenalty < iMinPenalty) { iMinPenalty = iPenalty; m_iMaskPattern = i; } } pMask->SetMaskQRCode (m_iMaskPattern, m_iVersion); } else if (m_iMaskPattern <= MAX_MASK_NUMBER) { pMask->SetMaskQRCode (m_iMaskPattern, m_iVersion); } delete pMask; pSymbol = new CQRCodeSymbol; iRet = pSymbol->SetQRCodeSymbol (m_iSymbolSize, m_iRSLevel, m_iMaskPattern); delete pSymbol; if(RESULT_OK != iRet) { return 0; } iWidthLength = CalcPitch (BIT_COUNT_8, m_iSymbolSize); for (int i = 0; i < m_iSymbolSize; i ++) { for (int j = 0; j < m_iSymbolSize; j ++) { m_QRCodeImage [(i * iWidthLength) + j] = (BYTE)((g_byModuleData[j][m_iSymbolSize - (i + 1)] & 0x11) != 0); } } return m_uiQRCodeImageSize; }
void FormatModule(void) { int i, j; int nMinPenalty, nPenalty; memset(m_byModuleData, 0, sizeof(m_byModuleData)); SetFunctionModule(); SetCodeWordPattern(); if (m_nMaskingNo == -1) { m_nMaskingNo = 0; SetMaskingPattern(m_nMaskingNo); SetFormatInfoPattern(m_nMaskingNo); nMinPenalty = CountPenalty(); for (i = 1; i <= 7; ++i) { SetMaskingPattern(i); SetFormatInfoPattern(i); nPenalty = CountPenalty(); if (nPenalty < nMinPenalty) { nMinPenalty = nPenalty; m_nMaskingNo = i; } } } SetMaskingPattern(m_nMaskingNo); SetFormatInfoPattern(m_nMaskingNo); for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize; ++j) { m_byModuleData[i][j] = (BYTE)((m_byModuleData[i][j] & 0x11) != 0); } } }
void FormatModule(void) { int i, j; memset(m_byModuleData, 0, sizeof(m_byModuleData)); // Function module placement SetFunctionModule(); // Data placement SetCodeWordPattern(); if (m_nMaskingNo == -1) { // Select the best pattern masking m_nMaskingNo = 0; SetMaskingPattern(m_nMaskingNo); // Masking SetFormatInfoPattern(m_nMaskingNo); // Placement pattern format information int nMinPenalty = CountPenalty(); for (i = 1; i <= 7; i++) { SetMaskingPattern(i); // Masking SetFormatInfoPattern(i); // Placement pattern format information int nPenalty = CountPenalty(); if (nPenalty < nMinPenalty) { nMinPenalty = nPenalty; m_nMaskingNo = i; } } } SetMaskingPattern(m_nMaskingNo); // Masking SetFormatInfoPattern(m_nMaskingNo); // Placement pattern format information // The module pattern converted to a Boolean value for (i = 0; i < m_nSymbleSize; i++) { for (j = 0; j < m_nSymbleSize; j++) { m_byModuleData[i][j] = (uint8_t)((m_byModuleData[i][j] & 0x11) != 0); } } }