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;
}
Example #3
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_scale::testRoleAndDomainName()
{
    QuillImageFilter *filter =
        QuillImageFilterFactory::createImageFilter("org.maemo.scale");

    QVERIFY(filter);
    QCOMPARE(filter->name(), QString("com.meego.scale"));
    delete filter;
}
void ut_load::testRoleAndDomainName()
{
    QuillImageFilter *filter =
    QuillImageFilterFactory::createImageFilter(QuillImageFilter::Role_Load);

    QVERIFY(filter);
    QCOMPARE(filter->name(), QString("com.meego.load"));
    delete filter;
}
void ut_autocontrast::testGenerator()
{
    QImage image = QImage(QSize(3, 1), QImage::Format_RGB32);

    image.setPixel(QPoint(0, 0), qRgb(64, 64, 64));
    image.setPixel(QPoint(1, 0), qRgb(96, 96, 96));
    image.setPixel(QPoint(2, 0), qRgb(128, 128, 128));

    QuillImageFilter *newFilterGenerator =
        QuillImageFilterFactory::createImageFilter(filterName);
    QVERIFY(newFilterGenerator);
    QCOMPARE(newFilterGenerator->name(), filterName);

    QuillImageFilterGenerator *filterGenerator =
        dynamic_cast<QuillImageFilterGenerator*>(newFilterGenerator);
    QVERIFY(filterGenerator);

    if(filterGenerator){
        filterGenerator->apply(image);

        QuillImageFilter *filter = filterGenerator->resultingFilter();
        QCOMPARE(filter->name(), resultName);

        // Center: 96 to 127.5
        Unittests::compareReal(filter->option(QuillImageFilter::Brightness).toDouble(),
                               31.5/2.55);
        // Contrast component: scale 64 to 255
        Unittests::compareReal(filter->option(QuillImageFilter::Contrast).toDouble(),
                               (255.0-64.0)/64.0*100.0);
        image = filter->apply(image);
        // See that the contrast has really been stretched throughout.
        QCOMPARE(image.pixel(QPoint(0, 0)), qRgb(0, 0, 0));
        QCOMPARE(image.pixel(QPoint(1, 0)), qRgb(128, 128, 128));
        QCOMPARE(image.pixel(QPoint(2, 0)), qRgb(255, 255, 255));
        delete filter;
    }
    else
        QFAIL("The filterGenerator is null!");
    delete newFilterGenerator;
}
void ut_redeyereduction::testReductTwoAreas()
{
    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 <= 160; i+=60)
        centerPoints << QPoint(i, i);
    QVERIFY(filter->setOption(QuillImageFilter::Center, QVariant(centerPoints)));

    QVariantList radii;
    for (int r = 10; r <= 40; r+=30)
        radii << QVariant(r);
    QVERIFY(filter->setOption(QuillImageFilter::Radius, QVariant(radii)));

    QImage image("/usr/share/quillimagefilter-tests/images/redeye.jpg");
    QVERIFY(!image.isNull());

    QImage image1 = filter->apply(image);
    bool bIsReduced = false;
    for(int h=95; h<105; h++) {
            for(int v =95; v<105; v++) {
                    QRgb color = image.pixel(QPoint(h, v));
                    int limit = (qGreen(color) + qBlue(color)) * 2 / 3;
                    if (qRed(color) > limit) {
                            QVERIFY(qRed(image.pixel(QPoint(h,v))) > (qRed(image1.pixel(QPoint(h,v)))));
                            bIsReduced = true;
                        }
                }
        }
    QVERIFY(bIsReduced);

    bIsReduced = false;
    for(int h=145; h<175; h++) {
            for(int v =145; v<175; v++) {
                    QRgb color = image.pixel(QPoint(h, v));
                    int limit = (qGreen(color) + qBlue(color)) * 2 / 3;
                    if (qRed(color) > limit) {
                            QVERIFY(qRed(image.pixel(QPoint(h,v))) > (qRed(image1.pixel(QPoint(h,v)))));
                            bIsReduced = true;
                        }
                }
        }
    QVERIFY(bIsReduced);

    delete filter;
}
Example #8
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_autocontrast::testCutoff()
{
    QImage image = QImage(QSize(200, 1), QImage::Format_RGB32);

    image.fill(qRgb(128, 128, 128));

    // This should be cut off
    image.setPixel(QPoint(0, 0), qRgb(0, 0, 0));

    // These should not be cut off
    image.setPixel(QPoint(198, 0), qRgb(255, 255, 255));
    image.setPixel(QPoint(199, 0), qRgb(255, 255, 255));

    QuillImageFilter *newFilterGenerator =
        QuillImageFilterFactory::createImageFilter(filterName);
    QVERIFY(newFilterGenerator);

    QuillImageFilterGenerator *filterGenerator =
        dynamic_cast<QuillImageFilterGenerator*>(newFilterGenerator);
    if(filterGenerator){
        filterGenerator->apply(image);

        QuillImageFilter *filter = filterGenerator->resultingFilter();
        QCOMPARE(filter->name(), resultName);

        // Center: 191.5 to 127.5
        Unittests::compareReal(filter->option(QuillImageFilter::Brightness).toDouble(),
                               -64/2.55);
        // Contrast component: scale 127 to 255
        Unittests::compareReal(filter->option(QuillImageFilter::Contrast).toDouble(),
                               (255.0-127.0)/127.0*100.0);
        delete filter;
    }
    else
        QFAIL("The filterGenerator is null!");
    delete newFilterGenerator;
}
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;
}