File indexing completed on 2024-05-12 04:01:32

0001 /*
0002     SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: MIT
0004 */
0005 
0006 #ifndef PRISON_ZXINGONEDBARCODE_H
0007 #define PRISON_ZXINGONEDBARCODE_H
0008 
0009 #include "abstractbarcode_p.h"
0010 #include "zxingutil_p.h"
0011 
0012 #include <ZXing/BitMatrix.h>
0013 #include <ZXing/MultiFormatWriter.h>
0014 
0015 #include <stdexcept>
0016 
0017 namespace Prison
0018 {
0019 /** Generic support for ZXing 1D barcodes. */
0020 template<ZXing::BarcodeFormat Format>
0021 class ZXingOneDBarcode : public AbstractBarcodePrivate
0022 {
0023 public:
0024     explicit inline ZXingOneDBarcode()
0025         : AbstractBarcodePrivate(Barcode::OneDimension)
0026     {
0027     }
0028 
0029 protected:
0030     inline QImage paintImage() override
0031     {
0032         try {
0033             ZXing::MultiFormatWriter writer(Format);
0034             const auto matrix = writer.encode(ZXingUtil::toStdWString(m_data), 1, 1);
0035             return ZXingUtil::toImage(matrix, m_foreground, m_background);
0036         } catch (const std::invalid_argument &e) {
0037         }; // input too large or incompatible
0038         return {};
0039     }
0040 };
0041 
0042 }
0043 
0044 #endif // PRISON_PDF417BARCODE_H