From 63d3558b146d7a70278c674b9a8217a1f7c9714a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Sun, 10 Dec 2023 08:46:26 +0100 Subject: [PATCH] Provide the zoom level to QImageReader when fetching the tile size Although technically not needed here, it workarounds the issue with the broken Qt SVG imageformat plugin (QTBUG-119910). --- src/map/mbtilesmap.cpp | 11 +++++------ src/map/mbtilesmap.h | 4 +--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/map/mbtilesmap.cpp b/src/map/mbtilesmap.cpp index 7ac6791a..05c5d67c 100644 --- a/src/map/mbtilesmap.cpp +++ b/src/map/mbtilesmap.cpp @@ -129,15 +129,14 @@ bool MBTilesMap::getBounds() bool MBTilesMap::getTileSize() { - QString sql("SELECT tile_data FROM tiles LIMIT 1"); + QString sql("SELECT zoom_level, tile_data FROM tiles LIMIT 1"); QSqlQuery query(sql, _db); query.first(); - QByteArray data = query.value(0).toByteArray(); + QByteArray z(QByteArray::number(query.value(0).toInt())); + QByteArray data = query.value(1).toByteArray(); QBuffer buffer(&data); - /* Explicitly specify the image plugin in case of vector tiles - (QTBUG-119910 workaround) */ - QImageReader reader(&buffer, _scalable ? QByteArray("mvt") : QByteArray()); + QImageReader reader(&buffer, z); QSize tileSize(reader.size()); if (!tileSize.isValid() || tileSize.width() != tileSize.height()) { @@ -217,9 +216,9 @@ MBTilesMap::MBTilesMap(const QString &fileName, QObject *parent) return; if (!getBounds()) return; - getTileFormat(); if (!getTileSize()) return; + getTileFormat(); getTilePixelRatio(); getName(); diff --git a/src/map/mbtilesmap.h b/src/map/mbtilesmap.h index 2e316f28..c3e9fbf1 100644 --- a/src/map/mbtilesmap.h +++ b/src/map/mbtilesmap.h @@ -21,10 +21,8 @@ public: const QPixmap &pixmap() const {return _pixmap;} void load() { - QByteArray z(QString::number(_zoom).toLatin1()); - QBuffer buffer(&_data); - QImageReader reader(&buffer, z); + QImageReader reader(&buffer, QByteArray::number(_zoom)); if (_scaledSize) reader.setScaledSize(QSize(_scaledSize, _scaledSize)); _pixmap = QPixmap::fromImage(reader.read());