TestWriterMain.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright 2016 Nu-book Inc.
  3. * Copyright 2019 Axel Waggershauser
  4. */
  5. // SPDX-License-Identifier: Apache-2.0
  6. #include "BitMatrix.h"
  7. #ifdef ZXING_EXPERIMENTAL_API
  8. #include "WriteBarcode.h"
  9. #else
  10. #include "MultiFormatWriter.h"
  11. #endif
  12. #include <vector>
  13. using namespace ZXing;
  14. using namespace std::literals;
  15. #define STB_IMAGE_WRITE_IMPLEMENTATION
  16. #include <stb_image_write.h>
  17. #ifdef ZXING_EXPERIMENTAL_API
  18. void savePng(ImageView iv, BarcodeFormat format)
  19. {
  20. stbi_write_png((ToString(format) + ".png"s).c_str(), iv.width(), iv.height(), iv.pixStride(), iv.data(), iv.rowStride());
  21. }
  22. #else
  23. void savePng(const BitMatrix& matrix, BarcodeFormat format)
  24. {
  25. auto bitmap = ToMatrix<uint8_t>(matrix);
  26. stbi_write_png((ToString(format) + ".png"s).c_str(), bitmap.width(), bitmap.height(), 1, bitmap.data(), 0);
  27. }
  28. #endif
  29. int main()
  30. {
  31. std::string text = "http://www.google.com/";
  32. for (auto format : {
  33. BarcodeFormat::Aztec,
  34. BarcodeFormat::DataMatrix,
  35. BarcodeFormat::PDF417,
  36. BarcodeFormat::QRCode })
  37. {
  38. #ifdef ZXING_EXPERIMENTAL_API
  39. savePng(CreateBarcodeFromText(text, format).symbol(), format);
  40. #else
  41. savePng(MultiFormatWriter(format).encode(text, 200, 200), format);
  42. #endif
  43. }
  44. text = "012345678901234567890123456789";
  45. using FormatSpecs = std::vector<std::pair<BarcodeFormat, size_t>>;
  46. for (const auto& [format, length] : FormatSpecs({
  47. // {BarcodeFormat::Codabar, 0},
  48. {BarcodeFormat::Code39, 0},
  49. {BarcodeFormat::Code93, 0},
  50. {BarcodeFormat::Code128, 0},
  51. {BarcodeFormat::EAN8, 7},
  52. {BarcodeFormat::EAN13, 12},
  53. {BarcodeFormat::ITF, 0},
  54. {BarcodeFormat::UPCA, 11},
  55. {BarcodeFormat::UPCE, 7} }))
  56. {
  57. auto input = length > 0 ? text.substr(0, length) : text;
  58. #ifdef ZXING_EXPERIMENTAL_API
  59. savePng(CreateBarcodeFromText(input, format).symbol(), format);
  60. #else
  61. savePng(MultiFormatWriter(format).encode(input, 100, 100), format);
  62. #endif
  63. }
  64. }