void ut_load::testQImage()
{
    QFile file("/usr/share/quillimagefilter-tests/images/16_color_palette.png");
    QuillImageFilter *filter =
            new QuillImageFilter("com.meego.load");
    QVERIFY(filter);
    QCOMPARE(filter->name(), QString("com.meego.load"));
    QVERIFY(filter->supportsOption(QuillImageFilter::FileName));
    QVERIFY(filter->supportsOption(QuillImageFilter::FileFormat));
    QVERIFY(filter->supportsOption(QuillImageFilter::DisableUndo));
    QVERIFY(filter->supportsOption(QuillImageFilter::SizeAfter));

    filter->setOption(QuillImageFilter::FileName,
                      QVariant(file.fileName()));
    filter->setOption(QuillImageFilter::MimeType,
                      QVariant("image/png"));

    QCOMPARE(filter->option(QuillImageFilter::FileName).toString(),
             file.fileName());
    QCOMPARE(filter->option(QuillImageFilter::MimeType).toString(),
             QString("image/png"));
    QCOMPARE(filter->option(QuillImageFilter::FileFormat).toString(),
             QString("png"));

    QImage image(file.fileName());
    QImage loadedImage = filter->apply(image);

    QVERIFY(Unittests::compareImage(loadedImage, QuillImage(image)));

    delete filter;
}
void ut_load::testFileNotFound()
{
    QFile fooFile("/usr/share/quillimagefilter-tests/images/fooxxx.png");
    QVERIFY(!fooFile.exists());

    QImage fooImage(fooFile.fileName());
    QuillImageFilter *filter =
        QuillImageFilterFactory::createImageFilter("org.maemo.load");
    QVERIFY(filter);
    QCOMPARE(filter->name(), QString("com.meego.load"));
    QVERIFY(filter->supportsOption(QuillImageFilter::FileName));
    QVERIFY(filter->supportsOption(QuillImageFilter::FileFormat));
    QVERIFY(filter->supportsOption(QuillImageFilter::DisableUndo));
    QVERIFY(filter->supportsOption(QuillImageFilter::SizeAfter));

    filter->setOption(QuillImageFilter::FileName,
                      QVariant(fooFile.fileName()));
    filter->setOption(QuillImageFilter::MimeType,
                      QVariant("image/png"));

    filter->apply(fooImage);
    QCOMPARE(filter->error(),QuillImageFilter::FileNotFoundError);
    fooFile.close();
    delete filter;
}
void ut_scale::testScaleFilter()
{
    QuillImageFilter *filter =
        QuillImageFilterFactory::createImageFilter("org.maemo.scale");

    QVERIFY(filter);

    QVERIFY(filter->supportsOption(QuillImageFilter::SizeAfter));

    // Assuming full image, rescaling to half size

    QVERIFY(filter->setOption(QuillImageFilter::SizeAfter, QSize(4, 1)));

    QCOMPARE(filter->option(QuillImageFilter::SizeAfter),
             QVariant(QSize(4, 1)));

    QImage image = Unittests::generatePaletteImage();
    QCOMPARE(image.size(), QSize(8, 2));

    QImage filteredImage = filter->apply(image);

    QCOMPARE(filteredImage, image.scaled(QSize(4, 1), Qt::IgnoreAspectRatio,
                                         Qt::SmoothTransformation));

    // full image, rescaling to different aspect ratio

    QVERIFY(filter->setOption(QuillImageFilter::SizeAfter, QSize(2, 8)));

    filteredImage = filter->apply(image);

    QCOMPARE(filteredImage, image.scaled(QSize(2, 8), Qt::IgnoreAspectRatio,
                                         Qt::SmoothTransformation));

    delete filter;
}
Example #4
0
void ut_crop::testFullImage()
{
    QuillImageFilter *filter = //new QuillImageFilter("org.maemo.crop");
        QuillImageFilterFactory::createImageFilter("org.maemo.crop");

    QVERIFY(filter);
    QCOMPARE(filter->name(), QString("com.meego.crop"));

    QVERIFY(filter->supportsOption(QuillImageFilter::CropRectangle));

    // Full image cropped from right into 6x2

    QVERIFY(filter->setOption(QuillImageFilter::CropRectangle,
                              QRect(QPoint(2, 0), QPoint(7, 1))));

    QCOMPARE(filter->option(QuillImageFilter::CropRectangle),
             QVariant(QRect(QPoint(2, 0), QPoint(7, 1))));

    QImage image = Unittests::generatePaletteImage();
    QCOMPARE(image.size(), QSize(8, 2));

    QImage filteredImage = filter->apply(image);

    QCOMPARE(filteredImage, image.copy(2, 0, 6, 2));

    delete filter;
}
void ut_rotate::testRotateFilter()
{
    QuillImageFilter *filter =
        QuillImageFilterFactory::createImageFilter("org.maemo.rotate");

    QVERIFY(filter);

    QVERIFY(filter->supportsOption(QuillImageFilter::Angle));
    QVERIFY(filter->setOption(QuillImageFilter::Angle, QVariant(90)));

    bool bOK = true;
    QCOMPARE(filter->option(QuillImageFilter::Angle).toDouble(&bOK), 90.0);
    QVERIFY(bOK);

    QuillImage image = Unittests::generatePaletteImage();
    QCOMPARE(image.size(), QSize(8, 2));

    QuillImage filteredImage = filter->apply(image);

    QCOMPARE(filteredImage.size(), QSize(2, 8));

    // Get reference image with QImage::transformed()
    QuillImage compareToQImage = image.transformed(QTransform().rotate(90));
    QCOMPARE(filteredImage, compareToQImage);

    // Four rotates should produce the original image
    QCOMPARE(filter->apply(filter->apply(filter->apply(filteredImage))),
        image);

    delete filter;
}
Example #6
0
void ut_flip::testFlip()
{
    QuillImageFilter *filter = new QuillImageFilter("org.maemo.flip");

    QVERIFY(filter->isValid());

    QCOMPARE(filter->name(), QString("com.meego.flip"));

    QVERIFY(filter->supportsOption(QuillImageFilter::Horizontal));
    QVERIFY(filter->setOption(QuillImageFilter::Horizontal, QVariant(true)));

    QCOMPARE(filter->option(QuillImageFilter::Horizontal).toBool(), true);

    QImage image = Unittests::generatePaletteImage();
    QCOMPARE(image.size(), QSize(8, 2));

    QImage filteredImage = filter->apply(image);

    QCOMPARE(filteredImage.size(), QSize(8, 2));

    // Verify against Qt's own flip

    QCOMPARE(filteredImage,
             image.transformed(QTransform().scale(-1, 1)));

    QVERIFY(filter->setOption(QuillImageFilter::Horizontal, QVariant(false)));

    filteredImage = filter->apply(image);

    QCOMPARE(filteredImage.size(), QSize(8, 2));

    // Verify against Qt's own flip

    QCOMPARE(filteredImage,
             image.transformed(QTransform().scale(1, -1)));

    delete filter;
}
void ut_redeyereduction::testRedEyeForCircularArea()
{
    QuillImageFilter *filter =
            QuillImageFilterFactory::createImageFilter("org.maemo.red-eye-reduction");

    QVERIFY(filter);
    QCOMPARE(filter->name(), QString("com.meego.red-eye-reduction"));

    QPoint center(100, 100);
    QVERIFY(filter->supportsOption(QuillImageFilter::Center));
    QVERIFY(filter->setOption(QuillImageFilter::Center, QVariant(center)));

    QVariantList list0 = filter->option(QuillImageFilter::SelectionArea).value<QVariantList>();
    QVERIFY(list0.count() == 0); // No radius set yet

    for (int r = 1; r < 101; r+=20)
        {
            QVERIFY(filter->supportsOption(QuillImageFilter::Radius));
            QVERIFY(filter->setOption(QuillImageFilter::Radius, QVariant(r)));

            bool bOK = true;
            QCOMPARE(filter->option(QuillImageFilter::Radius).toList().first().toInt(&bOK), r);
            QCOMPARE(filter->option(QuillImageFilter::Center).toList().first().toPoint(), center);

            QVERIFY(bOK);

            QVERIFY(filter->supportsOption(QuillImageFilter::SelectionArea));

            QPolygon polygon = filter->option(QuillImageFilter::SelectionArea).value<QPolygon>();

            float pi = 3.14159265;
            float margin = 1;
            for (int phi = 0; phi < 360; phi += 10)
                {
                    float x = r * cos( 2.0 * pi * phi / 360.0);
                    if (fabs(x) > margin)
                        x = (x>0 ? 1 : -1) * floor(fabs(x) - margin);
                    else
                        x = 0;
                    float y = r * sin( 2.0 * pi * phi / 360.0);
                    if (fabs(y) > margin)
                        y = (y>0 ? 1 : -1) * floor(fabs(y) - margin);
                    else
                        y = 0;
                    QPoint pt(x, y);
                    pt += center;
                    QVERIFY(polygon.containsPoint(pt, Qt::WindingFill));
                }

            for (int phi = 0; phi < 360; phi += 10)
                {
                    float x = r * cos( 2.0 * pi * phi / 360.0);
                    x = (x>0 ? 1 : -1) * ceil(fabs(x) + margin);
                    float y = r * sin( 2.0 * pi * phi / 360.0);
                    y = (y>0 ? 1 : -1) * ceil(fabs(y) + margin);
                    QPoint pt(x, y);
                    pt += center;
                    QVERIFY(polygon.containsPoint(pt, Qt::WindingFill) == false);
                }
        }
    delete filter;
}
void ut_redeyereduction::testRedEyeForMultipleCircularAreas()
{
    QuillImageFilter *filter =
            QuillImageFilterFactory::createImageFilter("org.maemo.red-eye-reduction");

    QVERIFY(filter);
    QCOMPARE(filter->name(), QString("com.meego.red-eye-reduction"));

    QVariantList centerPoints;
    for (int i = 100; i < 110; i++)
        centerPoints << QPoint(i, i);

    QVERIFY(filter->supportsOption(QuillImageFilter::Center));
    QVERIFY(filter->setOption(QuillImageFilter::Center, QVariant(centerPoints)));

    QVariantList list0 = filter->option(QuillImageFilter::SelectionArea).value<QVariantList>();
    QVERIFY(list0.count() == 0); // No radius set yet

    QVERIFY(filter->supportsOption(QuillImageFilter::Radius));
    QVariantList radii;
    for (int r = 1; r < 101; r++)
        radii << QVariant(r);
    QVERIFY(filter->setOption(QuillImageFilter::Radius, QVariant(radii)));

    QVariantList outRadii = filter->option(QuillImageFilter::Radius).value<QVariantList>();
    for (int i = 0; i < radii.count(); i++) {
            bool bOK = true;
            QCOMPARE(outRadii[i].toInt(), radii[i].toInt(&bOK));
            QVERIFY(bOK);
        }

    QVariantList outCenter = filter->option(QuillImageFilter::Center).value<QVariantList>();
    for (int i = 0; i < centerPoints.count(); i++) {
            QCOMPARE(outCenter[i].toPoint(), centerPoints[i].toPoint());
        }

    QVERIFY(filter->supportsOption(QuillImageFilter::SelectionArea));
    QVariantList polygonList = filter->option(QuillImageFilter::SelectionArea).value<QVariantList>();

    QCOMPARE( polygonList.count(), ( radii.count() < centerPoints.count() ? radii.count() : centerPoints.count() ) );

    for (int i = 0; i < polygonList.count(); i++)
        {
            QPolygon polygon = polygonList[i].value<QPolygon>();

            float pi = 3.14159265;
            float margin = 1;
            for (int phi = 0; phi < 360; phi += 10)
                {
                    float x = radii[i].toInt() * cos( 2.0 * pi * phi / 360.0);
                    if (fabs(x) > margin)
                        x = (x>0 ? 1 : -1) * floor(fabs(x) - margin);
                    else
                        x = 0;
                    float y = radii[i].toInt() * sin( 2.0 * pi * phi / 360.0);
                    if (fabs(y) > margin)
                        y = (y>0 ? 1 : -1) * floor(fabs(y) - margin);
                    else
                        y = 0;
                    QPoint pt(x, y);
                    pt += centerPoints[i].toPoint();
                    QVERIFY(polygon.containsPoint(pt, Qt::WindingFill));
                }

            for (int phi = 0; phi < 360; phi += 10)
                {
                    float x = radii[i].toInt() * cos( 2.0 * pi * phi / 360.0);
                    x = (x>0 ? 1 : -1) * ceil(fabs(x) + margin);
                    float y = radii[i].toInt() * sin( 2.0 * pi * phi / 360.0);
                    y = (y>0 ? 1 : -1) * ceil(fabs(y) + margin);
                    QPoint pt(x, y);
                    pt += centerPoints[i].toPoint();
                    QVERIFY(polygon.containsPoint(pt, Qt::WindingFill) == false);
                }
        }
    delete filter;
}