kimgio: webp optimization

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-04-10 08:37:02 +03:00
parent d94f5f5d8a
commit f07799521f

View file

@ -83,14 +83,15 @@ bool WebPHandler::read(QImage *image)
m_loopcount = webpaniminfo.loop_count; m_loopcount = webpaniminfo.loop_count;
m_imagecount = webpaniminfo.frame_count; m_imagecount = webpaniminfo.frame_count;
QRectF previousrect;
QImage buffer(webpaniminfo.canvas_width, webpaniminfo.canvas_height, QImage::Format_ARGB32); QImage buffer(webpaniminfo.canvas_width, webpaniminfo.canvas_height, QImage::Format_ARGB32);
if (Q_UNLIKELY(buffer.isNull())) { if (Q_UNLIKELY(buffer.isNull())) {
kWarning() << "Could not create buffer image"; kWarning() << "Could not create buffer image";
return false; return false;
} }
const QColor background = QColor(QRgb(webpaniminfo.bgcolor));
QRectF previousrect;
QPainter painter(&buffer);
const QColor background = QColor(QRgb(webpaniminfo.bgcolor));
int framecounter = 0; int framecounter = 0;
WebPIterator webpiter; WebPIterator webpiter;
const WebPDemuxer* webpdemuxer = WebPAnimDecoderGetDemuxer(webpanimdec); const WebPDemuxer* webpdemuxer = WebPAnimDecoderGetDemuxer(webpanimdec);
@ -131,7 +132,6 @@ bool WebPHandler::read(QImage *image)
return false; return false;
} }
QPainter painter(&buffer);
switch (webpiter.dispose_method) { switch (webpiter.dispose_method) {
case WEBP_MUX_DISPOSE_BACKGROUND: { case WEBP_MUX_DISPOSE_BACKGROUND: {
// yep, there are images attempting to dispose the background without previous frame // yep, there are images attempting to dispose the background without previous frame
@ -167,7 +167,7 @@ bool WebPHandler::read(QImage *image)
} }
previousrect = QRectF(webpiter.x_offset, webpiter.y_offset, webpiter.width, webpiter.height); previousrect = QRectF(webpiter.x_offset, webpiter.y_offset, webpiter.width, webpiter.height);
painter.drawImage(previousrect, frame); painter.drawImage(previousrect, frame);
painter.end();
if (framecounter == m_currentimage) { if (framecounter == m_currentimage) {
// bound to reasonable limits // bound to reasonable limits
@ -176,6 +176,7 @@ bool WebPHandler::read(QImage *image)
} }
framecounter++; framecounter++;
} }
painter.end();
*image = buffer; *image = buffer;
m_currentimage++; m_currentimage++;