CBC_CommonDecoderResult* CBC_QRCoderDecoder::Decode(FX_BOOL* image, int32_t width, int32_t height, int32_t& e) { CBC_CommonBitMatrix bits; bits.Init(width); for (int32_t i = 0; i < width; i++) { for (int32_t j = 0; j < height; j++) { if (image[i * width + j]) { bits.Set(j, i); } } } CBC_CommonDecoderResult* cdr = Decode(&bits, height, e); BC_EXCEPTION_CHECK_ReturnValue(e, NULL); return cdr; }
CBC_CommonBitMatrix* CBC_DataMatrixBitMatrixParser::ExtractDataRegion( CBC_CommonBitMatrix* bitMatrix, int32_t& e) { int32_t symbolSizeRows = m_version->GetSymbolSizeRows(); int32_t symbolSizeColumns = m_version->GetSymbolSizeColumns(); if (bitMatrix->GetHeight() != symbolSizeRows) { e = BCExceptionCanNotCallGetDimensionOnNonSquareMatrix; return NULL; } int32_t dataRegionSizeRows = m_version->GetDataRegionSizeRows(); int32_t dataRegionSizeColumns = m_version->GetDataRegionSizeColumns(); int32_t numDataRegionsRow = symbolSizeRows / dataRegionSizeRows; int32_t numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns; int32_t sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows; int32_t sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns; CBC_CommonBitMatrix* bitMatrixWithoutAlignment = new CBC_CommonBitMatrix(); bitMatrixWithoutAlignment->Init(sizeDataRegionColumn, sizeDataRegionRow); int32_t dataRegionRow; for (dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) { int32_t dataRegionRowOffset = dataRegionRow * dataRegionSizeRows; int32_t dataRegionColumn; for (dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) { int32_t dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns; int32_t i; for (i = 0; i < dataRegionSizeRows; ++i) { int32_t readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i; int32_t writeRowOffset = dataRegionRowOffset + i; int32_t j; for (j = 0; j < dataRegionSizeColumns; ++j) { int32_t readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j; if (bitMatrix->Get(readColumnOffset, readRowOffset)) { int32_t writeColumnOffset = dataRegionColumnOffset + j; bitMatrixWithoutAlignment->Set(writeColumnOffset, writeRowOffset); } } } } } return bitMatrixWithoutAlignment; }