Beispiel #1
0
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;
}
Beispiel #2
0
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);
		}
	}
}
Beispiel #3
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);
		}
	}
}