Example #1
0
void ImageDocument::setContents(const ImageContents &contents)
{
    Q_D(ImageDocument);

    if (contents.isNull()) {
        clear();
        return;
    }

    const auto header = contents.header();
    d->type = header.type();
    d->size = header.size();
    d->imageFormat = header.imageFormat();
    d->imageCount = header.imageCount();
    d->mipmapCount = header.mipmapCount();
    d->frameDelay = header.frameDelay();
    d->loopCount = header.loopCount();
    for (int index = 0; index < d->imageCount; ++index) {
        for (int level = 0; level < d->mipmapCount; ++level) {
            auto image = contents.image(index, level);
            std::unique_ptr<ImageDocumentItem> item(new ImageDocumentItem(this));
            item->setSize(image.size());
            item->setImage(image);
            d->items[ImageDocumentPrivate::ImageIndex(index, level)] = std::move(item);
        }
    }

    emit contentsChanged();
}
Example #2
0
QImage ImageContents::image(int index, int level) const
{
    if (index < 0 || index >= imageCount())
        return QImage();
    if (level < 0 || level >= mipmapCount())
        return QImage();
    return d->images.value(ImageContentsData::ImageIndex(index, level));
}
Example #3
0
void TestDds::testMipmaps()
{
    QFETCH(QString, fileName);
    QFETCH(QSize, size);
    QFETCH(int, mipmapCount);

    const QString path = QStringLiteral(":/data/") + fileName + QStringLiteral(".dds");
    ImageIO reader(path);
//    QVERIFY(reader.canRead());
    const auto result = reader.read();
    const auto &status = result.first;
    const auto &contents = result.second;
    const auto header = contents.header();
    QVERIFY2(status, qPrintable(status.toString()));
    QCOMPARE(header.mipmapCount(), mipmapCount);

    for (int i = 0; i < header.mipmapCount(); ++i) {
        QImage image = contents.image(0, i);
        QVERIFY(!image.isNull());
        QCOMPARE(image.size(), size / (1 << i));
        QString sourcePath = QString(":/data/%1 %2.png").arg(fileName).arg(i);
        QVERIFY(compareImages(image, QImage(sourcePath)) == true);
    }
}