2016-11-20 14:36:14 +02:00
|
|
|
#include "QrCode.hpp"
|
|
|
|
|
|
|
|
#include "QRCodeImageProvider.h"
|
|
|
|
|
2017-01-23 06:15:49 +02:00
|
|
|
QImage QRCodeImageProvider::genQrImage(const QString &id, QSize *size)
|
2016-11-20 14:36:14 +02:00
|
|
|
{
|
|
|
|
using namespace qrcodegen;
|
|
|
|
|
|
|
|
QrCode qrcode = QrCode::encodeText(id.toStdString().c_str(), QrCode::Ecc::MEDIUM);
|
2018-10-14 14:55:59 +03:00
|
|
|
unsigned int black = 0;
|
|
|
|
unsigned int white = 1;
|
|
|
|
unsigned int borderSize = 4;
|
|
|
|
unsigned int imageSize = qrcode.size + (2 * borderSize);
|
|
|
|
QImage img = QImage(imageSize, imageSize, QImage::Format_Mono);
|
|
|
|
|
|
|
|
for (unsigned int y = 0; y < imageSize; ++y)
|
|
|
|
for (unsigned int x = 0; x < imageSize; ++x)
|
|
|
|
if ((x < borderSize) || (x >= imageSize - borderSize) || (y < borderSize) || (y >= imageSize - borderSize))
|
|
|
|
img.setPixel(x, y, white);
|
|
|
|
else
|
|
|
|
img.setPixel(x, y, qrcode.getModule(x - borderSize, y - borderSize) ? black : white);
|
2016-11-20 14:36:14 +02:00
|
|
|
if (size)
|
2018-10-14 14:55:59 +03:00
|
|
|
*size = QSize(imageSize, imageSize);
|
|
|
|
|
2016-11-20 14:36:14 +02:00
|
|
|
return img;
|
|
|
|
}
|
2017-01-23 06:15:49 +02:00
|
|
|
|
|
|
|
QImage QRCodeImageProvider::requestImage(const QString &id, QSize *size, const QSize &/* requestedSize */)
|
|
|
|
{
|
|
|
|
return genQrImage(id, size);
|
|
|
|
}
|