|
|
|
@ -12,8 +12,16 @@ |
|
|
|
|
|
|
|
|
|
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) { |
|
|
|
|
QR::QR(const std::string& data, std::string outputFile, size_t size, qrcodegen::QrCode::Ecc type) : outputFile(std::move(outputFile)) { |
|
|
|
|
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(data.c_str(), type); |
|
|
|
|
|
|
|
|
|
static_assert(FormatLength == 5, "exhaustive formats: did you miss to add something here?"); |
|
|
|
|
this->renderers.insert({Format::CONSOLE, std::make_unique<ConsoleRenderer>(this->pixels, qr.getSize(), size)}); |
|
|
|
|
this->renderers.insert({Format::PNG, std::make_unique<PNGRenderer>(this->pixels, qr.getSize(), size)}); |
|
|
|
|
this->renderers.insert({Format::SVG, std::make_unique<SVGRenderer>(this->pixels, qr.getSize(), size)}); |
|
|
|
|
this->renderers.insert({Format::JPG, std::make_unique<JPGRenderer>(this->pixels, qr.getSize(), size)}); |
|
|
|
|
this->renderers.insert({Format::BMP, std::make_unique<BMPRenderer>(this->pixels, qr.getSize(), 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++) { |
|
|
|
@ -24,15 +32,9 @@ QR::QR(const std::string& data, std::string outputFile, size_t size, qrcodegen:: |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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<ConsoleRenderer>(); break; |
|
|
|
|
case Format::PNG : this->renderTyped<PNGRenderer>(); break; |
|
|
|
|
case Format::SVG : this->renderTyped<SVGRenderer>(); break; |
|
|
|
|
case Format::JPG : this->renderTyped<JPGRenderer>(); break; |
|
|
|
|
case Format::BMP : this->renderTyped<BMPRenderer>(); break; |
|
|
|
|
case Format::END : break; |
|
|
|
|
} |
|
|
|
|
assert(this->renderers.find(format) != this->renderers.end() && "ERROR: a non-valid renderer has been selected"); |
|
|
|
|
|
|
|
|
|
this->renderers.at(format)->render(this->outputFile); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |