From 0fc98b26920961f4cf9002f0413684d9c18671cc Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 1 Mar 2020 19:55:43 +0100 Subject: Experimental blurhash implementation (MXC2448) --- src/BlurhashProvider.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/BlurhashProvider.cpp (limited to 'src/BlurhashProvider.cpp') diff --git a/src/BlurhashProvider.cpp b/src/BlurhashProvider.cpp new file mode 100644 index 00000000..a5530a98 --- /dev/null +++ b/src/BlurhashProvider.cpp @@ -0,0 +1,42 @@ +#include "BlurhashProvider.h" + +#include + +#include + +#include "blurhash.hpp" + +QImage +BlurhashProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) +{ + QSize sz = requestedSize; + if (sz.width() < 1 || sz.height() < 1) + return QImage(); + + if (size) + *size = sz; + + auto decoded = blurhash::decode( + QUrl::fromPercentEncoding(id.toUtf8()).toStdString(), sz.width(), sz.height()); + if (decoded.image.empty()) { + *size = QSize(); + return QImage(); + } + + QImage image(sz, QImage::Format_RGB888); + + for (int y = 0; y < sz.height(); y++) { + for (int x = 0; x < sz.width(); x++) { + int base = (y * sz.width() + x) * 3; + image.setPixel(x, + y, + qRgb(decoded.image[base], + decoded.image[base + 1], + decoded.image[base + 2])); + } + } + + // std::copy(decoded.image.begin(), decoded.image.end(), image.bits()); + + return image; +} -- cgit 1.5.1