diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-03-16 17:07:23 +0100 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-03-16 17:07:23 +0100 |
commit | 51e7fa714ca76fd9edb342fc8e97451086e46fe3 (patch) | |
tree | 49caeb7689e53f35437523334ddef8836111a66b /src/plugins | |
parent | 4c932c40349d837592c6c429fabf2511596e0fd7 (diff) | |
parent | 10c6352fb384b732e942af9ada4cb8d07a793c45 (diff) | |
download | qtimageformats-51e7fa714ca76fd9edb342fc8e97451086e46fe3.tar.gz |
Merge remote-tracking branch 'origin/dev' into wip/cmake
Conflicts:
dependencies.yaml
Change-Id: Ia9a6efda0bea5bc7c5f9f8cd4735da0bd3c0da26
Diffstat (limited to 'src/plugins')
26 files changed, 56 insertions, 127 deletions
diff --git a/src/plugins/imageformats/dds/qddshandler.cpp b/src/plugins/imageformats/dds/qddshandler.cpp index 845f9b3..a0ac19b 100644 --- a/src/plugins/imageformats/dds/qddshandler.cpp +++ b/src/plugins/imageformats/dds/qddshandler.cpp @@ -1382,13 +1382,6 @@ QDDSHandler::QDDSHandler() : { } -#if QT_DEPRECATED_SINCE(5, 13) -QByteArray QDDSHandler::name() const -{ - return QByteArrayLiteral("dds"); -} -#endif - bool QDDSHandler::canRead() const { if (m_scanState == ScanNotScanned && !canRead(device())) diff --git a/src/plugins/imageformats/dds/qddshandler.h b/src/plugins/imageformats/dds/qddshandler.h index f4bc888..0c6449a 100644 --- a/src/plugins/imageformats/dds/qddshandler.h +++ b/src/plugins/imageformats/dds/qddshandler.h @@ -53,10 +53,6 @@ class QDDSHandler : public QImageIOHandler public: QDDSHandler(); -#if QT_DEPRECATED_SINCE(5, 13) - QByteArray name() const override; -#endif - bool canRead() const override; bool read(QImage *image) override; bool write(const QImage &image) override; diff --git a/src/plugins/imageformats/icns/main.cpp b/src/plugins/imageformats/icns/main.cpp index 70dd034..6a5af47 100644 --- a/src/plugins/imageformats/icns/main.cpp +++ b/src/plugins/imageformats/icns/main.cpp @@ -60,12 +60,12 @@ QImageIOPlugin::Capabilities QICNSPlugin::capabilities(QIODevice *device, const { if (format == QByteArrayLiteral("icns")) return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device || !device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QICNSHandler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/icns/qicnshandler.cpp b/src/plugins/imageformats/icns/qicnshandler.cpp index 9733ed7..dde783c 100644 --- a/src/plugins/imageformats/icns/qicnshandler.cpp +++ b/src/plugins/imageformats/icns/qicnshandler.cpp @@ -651,13 +651,6 @@ QICNSHandler::QICNSHandler() : { } -#if QT_DEPRECATED_SINCE(5, 13) -QByteArray QICNSHandler::name() const -{ - return QByteArrayLiteral("icns"); -} -#endif - bool QICNSHandler::canRead(QIODevice *device) { if (!device || !device->isReadable()) { diff --git a/src/plugins/imageformats/icns/qicnshandler_p.h b/src/plugins/imageformats/icns/qicnshandler_p.h index b532045..e83d4eb 100644 --- a/src/plugins/imageformats/icns/qicnshandler_p.h +++ b/src/plugins/imageformats/icns/qicnshandler_p.h @@ -132,10 +132,6 @@ public: bool read(QImage *image) override; bool write(const QImage &image) override; -#if QT_DEPRECATED_SINCE(5, 13) - QByteArray name() const override; -#endif - bool supportsOption(ImageOption option) const override; QVariant option(ImageOption option) const override; diff --git a/src/plugins/imageformats/imageformats.pro b/src/plugins/imageformats/imageformats.pro index be1e20a..4116591 100644 --- a/src/plugins/imageformats/imageformats.pro +++ b/src/plugins/imageformats/imageformats.pro @@ -21,9 +21,3 @@ qtConfig(jasper) { } else:darwin: { SUBDIRS += macjp2 } - -winrt { - SUBDIRS -= tiff \ - tga \ - webp -} diff --git a/src/plugins/imageformats/jp2/main.cpp b/src/plugins/imageformats/jp2/main.cpp index a1f1281..22368a5 100644 --- a/src/plugins/imageformats/jp2/main.cpp +++ b/src/plugins/imageformats/jp2/main.cpp @@ -64,12 +64,12 @@ QImageIOPlugin::Capabilities QJp2Plugin::capabilities(QIODevice *device, const Q { if (format == "jp2" || format == "j2k") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QJp2Handler::canRead(device, 0)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/jp2/qjp2handler.cpp b/src/plugins/imageformats/jp2/qjp2handler.cpp index ce23480..e9a470c 100644 --- a/src/plugins/imageformats/jp2/qjp2handler.cpp +++ b/src/plugins/imageformats/jp2/qjp2handler.cpp @@ -308,17 +308,6 @@ bool QJp2Handler::supportsOption(ImageOption option) const return (option == Quality || option == SubType); } -#if QT_DEPRECATED_SINCE(5, 13) -/*! - Return the common identifier of the format. - For JPEG 2000 this will return "jp2". - */ -QByteArray QJp2Handler::name() const -{ - return QByteArrayLiteral("jp2"); -} -#endif - /*! Automatic resource handling for a jas_image_t*. */ diff --git a/src/plugins/imageformats/jp2/qjp2handler_p.h b/src/plugins/imageformats/jp2/qjp2handler_p.h index 16ddc8a..bdaf601 100644 --- a/src/plugins/imageformats/jp2/qjp2handler_p.h +++ b/src/plugins/imageformats/jp2/qjp2handler_p.h @@ -64,9 +64,6 @@ public: QVariant option(ImageOption option) const override; void setOption(ImageOption option, const QVariant &value) override; bool supportsOption(ImageOption option) const override; -#if QT_DEPRECATED_SINCE(5, 13) - QByteArray name() const override; -#endif private: Q_DECLARE_PRIVATE(QJp2Handler) diff --git a/src/plugins/imageformats/macheif/main.cpp b/src/plugins/imageformats/macheif/main.cpp index 12d9a4a..785ad1f 100644 --- a/src/plugins/imageformats/macheif/main.cpp +++ b/src/plugins/imageformats/macheif/main.cpp @@ -58,16 +58,16 @@ QImageIOPlugin::Capabilities QMacHeifPlugin::capabilities(QIODevice *device, con { static const Capabilities sysCaps = QIIOFHelpers::systemCapabilities(QStringLiteral("public.heic")); + Capabilities cap; if (!sysCaps) - return 0; + return cap; if (format == "heic" || format == "heif") return sysCaps; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (sysCaps.testFlag(CanRead) && device->isReadable() && QMacHeifHandler::canRead(device)) cap |= CanRead; if (sysCaps.testFlag(CanWrite) && device->isWritable()) diff --git a/src/plugins/imageformats/macjp2/main.cpp b/src/plugins/imageformats/macjp2/main.cpp index 08b497e..ea0cf44 100644 --- a/src/plugins/imageformats/macjp2/main.cpp +++ b/src/plugins/imageformats/macjp2/main.cpp @@ -57,12 +57,12 @@ QImageIOPlugin::Capabilities QMacJp2Plugin::capabilities(QIODevice *device, cons { if (format == "jp2") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QMacJp2Handler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/macjp2/qmacjp2handler.cpp b/src/plugins/imageformats/macjp2/qmacjp2handler.cpp index 72f753a..11df94a 100644 --- a/src/plugins/imageformats/macjp2/qmacjp2handler.cpp +++ b/src/plugins/imageformats/macjp2/qmacjp2handler.cpp @@ -118,10 +118,4 @@ bool QMacJp2Handler::supportsOption(ImageOption option) const return (option == Quality); } -QByteArray QMacJp2Handler::name() const -{ - return QByteArrayLiteral("jp2"); -} - - QT_END_NAMESPACE diff --git a/src/plugins/imageformats/macjp2/qmacjp2handler.h b/src/plugins/imageformats/macjp2/qmacjp2handler.h index bf0496d..e1deaf7 100644 --- a/src/plugins/imageformats/macjp2/qmacjp2handler.h +++ b/src/plugins/imageformats/macjp2/qmacjp2handler.h @@ -63,7 +63,6 @@ public: QVariant option(ImageOption option) const override; void setOption(ImageOption option, const QVariant &value) override; bool supportsOption(ImageOption option) const override; - QByteArray name() const override; static bool canRead(QIODevice *iod); diff --git a/src/plugins/imageformats/mng/main.cpp b/src/plugins/imageformats/mng/main.cpp index 5e5b0a3..be82312 100644 --- a/src/plugins/imageformats/mng/main.cpp +++ b/src/plugins/imageformats/mng/main.cpp @@ -66,12 +66,12 @@ QImageIOPlugin::Capabilities QMngPlugin::capabilities(QIODevice *device, const Q { if (format == "mng") return Capabilities(CanRead); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QMngHandler::canRead(device)) cap |= CanRead; return cap; diff --git a/src/plugins/imageformats/mng/qmnghandler.cpp b/src/plugins/imageformats/mng/qmnghandler.cpp index 4106ba6..b37dca1 100644 --- a/src/plugins/imageformats/mng/qmnghandler.cpp +++ b/src/plugins/imageformats/mng/qmnghandler.cpp @@ -403,12 +403,6 @@ bool QMngHandler::canRead(QIODevice *device) } /*! \reimp */ -QByteArray QMngHandler::name() const -{ - return "mng"; -} - -/*! \reimp */ bool QMngHandler::read(QImage *image) { Q_D(QMngHandler); diff --git a/src/plugins/imageformats/mng/qmnghandler_p.h b/src/plugins/imageformats/mng/qmnghandler_p.h index 0f9a207..de2ff5c 100644 --- a/src/plugins/imageformats/mng/qmnghandler_p.h +++ b/src/plugins/imageformats/mng/qmnghandler_p.h @@ -57,7 +57,6 @@ class QMngHandler : public QImageIOHandler QMngHandler(); ~QMngHandler(); bool canRead() const override; - QByteArray name() const override; bool read(QImage *image) override; bool write(const QImage &image) override; int currentImageNumber() const override; diff --git a/src/plugins/imageformats/tga/main.cpp b/src/plugins/imageformats/tga/main.cpp index 22fd3be..9177aa8 100644 --- a/src/plugins/imageformats/tga/main.cpp +++ b/src/plugins/imageformats/tga/main.cpp @@ -64,12 +64,12 @@ QImageIOPlugin::Capabilities QTgaPlugin::capabilities(QIODevice *device, const Q { if (format == "tga") return Capabilities(CanRead); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QTgaHandler::canRead(device)) cap |= CanRead; return cap; diff --git a/src/plugins/imageformats/tga/qtgahandler.cpp b/src/plugins/imageformats/tga/qtgahandler.cpp index 9277e50..bc70f39 100644 --- a/src/plugins/imageformats/tga/qtgahandler.cpp +++ b/src/plugins/imageformats/tga/qtgahandler.cpp @@ -98,13 +98,6 @@ bool QTgaHandler::read(QImage *image) return !image->isNull(); } -#if QT_DEPRECATED_SINCE(5, 13) -QByteArray QTgaHandler::name() const -{ - return "tga"; -} -#endif - QVariant QTgaHandler::option(ImageOption option) const { if (option == Size && canRead()) { diff --git a/src/plugins/imageformats/tga/qtgahandler.h b/src/plugins/imageformats/tga/qtgahandler.h index 6550a11..8e16bb6 100644 --- a/src/plugins/imageformats/tga/qtgahandler.h +++ b/src/plugins/imageformats/tga/qtgahandler.h @@ -55,10 +55,6 @@ public: bool canRead() const override; bool read(QImage *image) override; -#if QT_DEPRECATED_SINCE(5, 13) - QByteArray name() const override; -#endif - static bool canRead(QIODevice *device); QVariant option(ImageOption option) const override; diff --git a/src/plugins/imageformats/tiff/main.cpp b/src/plugins/imageformats/tiff/main.cpp index 2c34097..8882f35 100644 --- a/src/plugins/imageformats/tiff/main.cpp +++ b/src/plugins/imageformats/tiff/main.cpp @@ -60,12 +60,12 @@ QImageIOPlugin::Capabilities QTiffPlugin::capabilities(QIODevice *device, const { if (format == "tiff" || format == "tif") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QTiffHandler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/tiff/qtiffhandler.cpp b/src/plugins/imageformats/tiff/qtiffhandler.cpp index 49edcdf..091e640 100644 --- a/src/plugins/imageformats/tiff/qtiffhandler.cpp +++ b/src/plugins/imageformats/tiff/qtiffhandler.cpp @@ -205,9 +205,14 @@ bool QTiffHandlerPrivate::canRead(QIODevice *device) // current implementation uses TIFFClientOpen which needs to be // able to seek, so sequential devices are not supported - QByteArray header = device->peek(4); - return header == QByteArray::fromRawData("\x49\x49\x2A\x00", 4) - || header == QByteArray::fromRawData("\x4D\x4D\x00\x2A", 4); + char h[4]; + if (device->peek(h, 4) != 4) + return false; + if ((h[0] == 0x49 && h[1] == 0x49) && (h[2] == 0x2a || h[2] == 0x2b) && h[3] == 0) + return true; // Little endian, classic or bigtiff + if ((h[0] == 0x4d && h[1] == 0x4d) && h[2] == 0 && (h[3] == 0x2a || h[3] == 0x2b)) + return true; // Big endian, classic or bigtiff + return false; } bool QTiffHandlerPrivate::openForRead(QIODevice *device) @@ -278,7 +283,7 @@ bool QTiffHandlerPrivate::readHeaders(QIODevice *device) else if ((grayscale || photometric == PHOTOMETRIC_PALETTE) && bitPerSample == 8 && samplesPerPixel == 1) format = QImage::Format_Indexed8; else if (samplesPerPixel < 4) - if (bitPerSample > 8 && photometric == PHOTOMETRIC_RGB) + if (bitPerSample == 16 && photometric == PHOTOMETRIC_RGB) format = QImage::Format_RGBX64; else format = QImage::Format_RGB32; @@ -294,7 +299,7 @@ bool QTiffHandlerPrivate::readHeaders(QIODevice *device) if (!gotField || !count || extrasamples[0] == EXTRASAMPLE_UNSPECIFIED) premultiplied = false; - if (bitPerSample > 8 && photometric == PHOTOMETRIC_RGB) { + if (bitPerSample == 16 && photometric == PHOTOMETRIC_RGB) { // We read 64-bit raw, so unassoc remains unpremultiplied. if (gotField && count && extrasamples[0] == EXTRASAMPLE_UNASSALPHA) premultiplied = false; @@ -394,9 +399,10 @@ bool QTiffHandler::read(QImage *image) } for (int i = 0; i<tableSize ;++i) { - const int red = redTable[i] / 257; - const int green = greenTable[i] / 257; - const int blue = blueTable[i] / 257; + // emulate libtiff behavior for 16->8 bit color map conversion: just ignore the lower 8 bits + const int red = redTable[i] >> 8; + const int green = greenTable[i] >> 8; + const int blue = blueTable[i] >> 8; qtColorTable[i] = qRgb(red, green, blue); } } @@ -810,13 +816,6 @@ bool QTiffHandler::write(const QImage &image) return true; } -#if QT_DEPRECATED_SINCE(5, 13) -QByteArray QTiffHandler::name() const -{ - return "tiff"; -} -#endif - QVariant QTiffHandler::option(ImageOption option) const { if (option == Size && canRead()) { diff --git a/src/plugins/imageformats/tiff/qtiffhandler_p.h b/src/plugins/imageformats/tiff/qtiffhandler_p.h index c2eb412..97a63e1 100644 --- a/src/plugins/imageformats/tiff/qtiffhandler_p.h +++ b/src/plugins/imageformats/tiff/qtiffhandler_p.h @@ -55,10 +55,6 @@ public: bool read(QImage *image) override; bool write(const QImage &image) override; -#if QT_DEPRECATED_SINCE(5, 13) - QByteArray name() const override; -#endif - static bool canRead(QIODevice *device); QVariant option(ImageOption option) const override; diff --git a/src/plugins/imageformats/wbmp/main.cpp b/src/plugins/imageformats/wbmp/main.cpp index 45da0ca..5e8206e 100644 --- a/src/plugins/imageformats/wbmp/main.cpp +++ b/src/plugins/imageformats/wbmp/main.cpp @@ -64,13 +64,13 @@ QImageIOPlugin::Capabilities QWbmpPlugin::capabilities(QIODevice *device, const if (format == "wbmp") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QWbmpHandler::canRead(device)) cap |= CanRead; diff --git a/src/plugins/imageformats/webp/main.cpp b/src/plugins/imageformats/webp/main.cpp index 7e9405b..02a3ed4 100644 --- a/src/plugins/imageformats/webp/main.cpp +++ b/src/plugins/imageformats/webp/main.cpp @@ -64,12 +64,12 @@ QWebpPlugin::Capabilities QWebpPlugin::capabilities(QIODevice *device, const QBy if (format == "webp") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QWebpHandler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/webp/qwebphandler.cpp b/src/plugins/imageformats/webp/qwebphandler.cpp index f0b8caf..c1898d0 100644 --- a/src/plugins/imageformats/webp/qwebphandler.cpp +++ b/src/plugins/imageformats/webp/qwebphandler.cpp @@ -162,6 +162,7 @@ bool QWebpHandler::read(QImage *image) if (!ensureScanned() || device()->isSequential() || !ensureDemuxer()) return false; + QRect prevFrameRect; if (m_iter.frame_num == 0) { // Read global meta-data chunks first WebPChunkIterator metaDataIter; @@ -177,6 +178,9 @@ bool QWebpHandler::read(QImage *image) if (!WebPDemuxGetFrame(m_demuxer, 1, &m_iter)) return false; } else { + if (m_iter.has_alpha && m_iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) + prevFrameRect = currentImageRect(); + // Go to next frame if (!WebPDemuxNextFrame(&m_iter)) return false; @@ -208,8 +212,16 @@ bool QWebpHandler::read(QImage *image) } else { // Animation QPainter painter(m_composited); - if (m_features.has_alpha && m_iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) - m_composited->fill(Qt::transparent); + if (!prevFrameRect.isEmpty()) { + painter.setCompositionMode(QPainter::CompositionMode_Clear); + painter.fillRect(prevFrameRect, Qt::black); + } + if (m_features.has_alpha) { + if (m_iter.blend_method == WEBP_MUX_NO_BLEND) + painter.setCompositionMode(QPainter::CompositionMode_Source); + else + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + } painter.drawImage(currentImageRect(), frame); *image = *m_composited; @@ -367,13 +379,6 @@ bool QWebpHandler::supportsOption(ImageOption option) const || option == BackgroundColor; } -#if QT_DEPRECATED_SINCE(5, 13) -QByteArray QWebpHandler::name() const -{ - return QByteArrayLiteral("webp"); -} -#endif - int QWebpHandler::imageCount() const { if (!ensureScanned()) diff --git a/src/plugins/imageformats/webp/qwebphandler_p.h b/src/plugins/imageformats/webp/qwebphandler_p.h index 96a8811..849afe3 100644 --- a/src/plugins/imageformats/webp/qwebphandler_p.h +++ b/src/plugins/imageformats/webp/qwebphandler_p.h @@ -57,10 +57,6 @@ public: ~QWebpHandler(); public: -#if QT_DEPRECATED_SINCE(5, 13) - QByteArray name() const override; -#endif - bool canRead() const override; bool read(QImage *image) override; |