mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-10-31 10:00:46 +03:00
43 lines
1.2 KiB
C++
43 lines
1.2 KiB
C++
|
#include "BlurhashProvider.h"
|
||
|
|
||
|
#include <algorithm>
|
||
|
|
||
|
#include <QUrl>
|
||
|
|
||
|
#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;
|
||
|
}
|