diff options
-rw-r--r-- | src/plugins/imageformats/ico/qicohandler.cpp | 21 | ||||
-rw-r--r-- | tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp | 5 |
2 files changed, 13 insertions, 13 deletions
diff --git a/src/plugins/imageformats/ico/qicohandler.cpp b/src/plugins/imageformats/ico/qicohandler.cpp index 2ddbc4519b..6d2c06c9c8 100644 --- a/src/plugins/imageformats/ico/qicohandler.cpp +++ b/src/plugins/imageformats/ico/qicohandler.cpp @@ -100,9 +100,10 @@ public: static bool write(QIODevice *device, const QVector<QImage> &images); + bool readIconEntry(int index, ICONDIRENTRY * iconEntry); + private: bool readHeader(); - bool readIconEntry(int index, ICONDIRENTRY * iconEntry); bool readBMPHeader(quint32 imageOffset, BMP_INFOHDR * header); void findColorInfo(QImage & image); @@ -341,7 +342,7 @@ bool ICOReader::readHeader() bool ICOReader::readIconEntry(int index, ICONDIRENTRY *iconEntry) { - if (iod) { + if (readHeader()) { if (iod->seek(startpos + ICONDIR_SIZE + (index * ICONDIRENTRY_SIZE))) { return readIconDirEntry(iod, iconEntry); } @@ -558,10 +559,10 @@ QImage ICOReader::iconAt(int index) if (icoAttrib.ncolors > 256) //color table can't be more than 256 return img; icoAttrib.w = iconEntry.bWidth; - if (icoAttrib.w == 0) + if (icoAttrib.w == 0) // means 256 pixels icoAttrib.w = header.biWidth; icoAttrib.h = iconEntry.bHeight; - if (icoAttrib.h == 0) + if (icoAttrib.h == 0) // means 256 pixels icoAttrib.h = header.biHeight/2; QImage::Format format = QImage::Format_ARGB32; @@ -779,17 +780,11 @@ QtIcoHandler::~QtIcoHandler() QVariant QtIcoHandler::option(ImageOption option) const { if (option == Size) { - QIODevice *device = QImageIOHandler::device(); - qint64 oldPos = device->pos(); ICONDIRENTRY iconEntry; - if (device->seek(oldPos + ICONDIR_SIZE + (m_currentIconIndex * ICONDIRENTRY_SIZE))) { - if (readIconDirEntry(device, &iconEntry)) { - device->seek(oldPos); - return QSize(iconEntry.bWidth, iconEntry.bHeight); - } + if (m_pICOReader->readIconEntry(m_currentIconIndex, &iconEntry)) { + return QSize(iconEntry.bWidth ? iconEntry.bWidth : 256, + iconEntry.bHeight ? iconEntry.bHeight : 256); } - if (!device->isSequential()) - device->seek(oldPos); } return QVariant(); } diff --git a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp index d2fae0e5e3..bff762fd04 100644 --- a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp +++ b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp @@ -324,6 +324,11 @@ void tst_QIcoImageFormat::pngCompression() QImage image; reader.jumpToImage(index); + + QSize size = reader.size(); + QCOMPARE(size.width(), width); + QCOMPARE(size.height(), height); + reader.read(&image); QCOMPARE(image.width(), width); |