#include #include #include #include "QR.hpp" #include "renderers/ConsoleRenderer.hpp" #include "renderers/PNGRenderer.hpp" #include "renderers/SVGRenderer.hpp" #include "renderers/JPGRenderer.hpp" #include "renderers/BMPRenderer.hpp" namespace massivedynamic { QR::QR(const std::string& data, std::string outputFile, size_t size, qrcodegen::QrCode::Ecc type) : outputFile(std::move(outputFile)), qr(qrcodegen::QrCode::encodeText(data.c_str(), type)), size(size) { // this is inherently stupid, but "qrcodegen::QrCode" does not give access to the // `segments` vector member and the class itself is marked final. for (int y = 0; y < qr.getSize(); y++) { for (int x = 0; x < qr.getSize(); x++) this->pixels.push_back(qr.getModule(x, y)); } } void QR::render(Format format) { static_assert(FormatLength == 5, "exhaustive formats: did you miss to add something here?"); switch(format) { case Format::CONSOLE : this->renderTyped(); break; case Format::PNG : this->renderTyped(); break; case Format::SVG : this->renderTyped(); break; case Format::JPG : this->renderTyped(); break; case Format::BMP : this->renderTyped(); break; case Format::END : break; } } }