diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-01-21 03:03:09 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-01-21 03:03:09 +0100 |
commit | b4e0c6a2b046985caa907fe2888245962d03e79b (patch) | |
tree | c596bb33a5da0ad41c3290ac8ac18e7b173071e8 | |
parent | abfb7b84d33726fa7b5fdff29371569018afdf8f (diff) | |
parent | 3e6d52b5628178c0ee1acac562403a2de7833a53 (diff) |
Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: Ie91dbdde92b2b87b60b4861234be718410154ff4
-rw-r--r-- | src/plugins/imageformats/webp/qwebphandler.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/plugins/imageformats/webp/qwebphandler.cpp b/src/plugins/imageformats/webp/qwebphandler.cpp index f0b8caf..aab7aad 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; |