Пример #1
0
std::vector<uint8_t> CBC_PDF417Writer::Encode(WideStringView contents,
                                              int32_t* pOutWidth,
                                              int32_t* pOutHeight) {
  std::vector<uint8_t> results;
  CBC_PDF417 encoder;
  int32_t col = (m_Width / m_ModuleWidth - 69) / 17;
  int32_t row = m_Height / (m_ModuleWidth * 20);
  if (row >= 3 && row <= 90 && col >= 1 && col <= 30)
    encoder.setDimensions(col, 1, row, 3);
  else if (col >= 1 && col <= 30)
    encoder.setDimensions(col, col, 90, 3);
  else if (row >= 3 && row <= 90)
    encoder.setDimensions(30, 1, row, row);
  if (!encoder.GenerateBarcodeLogic(contents, error_correction_level()))
    return results;

  CBC_BarcodeMatrix* barcodeMatrix = encoder.getBarcodeMatrix();
  std::vector<uint8_t> matrixData = barcodeMatrix->toBitArray();
  int32_t matrixWidth = barcodeMatrix->getWidth();
  int32_t matrixHeight = barcodeMatrix->getHeight();

  if (matrixWidth < matrixHeight) {
    RotateArray(&matrixData, matrixHeight, matrixWidth);
    std::swap(matrixWidth, matrixHeight);
  }
  *pOutWidth = matrixWidth;
  *pOutHeight = matrixHeight;
  results = pdfium::Vector2D<uint8_t>(*pOutWidth, *pOutHeight);
  memcpy(results.data(), matrixData.data(), *pOutWidth * *pOutHeight);
  return results;
}