Qt 生成条纹图

Qt 生成条纹图,条纹图作为图像处理的标准输入,可以尽快验证图像算法的准确性和作为常规测试数据,也可以作为真实图像的模拟,尽快打通软件流程。条纹图使用线性渐变作为条纹的生成方法,再按坐标排列进行绘图。

水平条纹图

cpp 复制代码
    QImage ii(600, 600, QImage::Format_ARGB32);
    ii.fill(Qt::transparent);
    QPainter *painter = new QPainter(&ii);
    painter->setRenderHint(QPainter::Antialiasing);

    // horizontal
    for (int i = 0; i < 10; ++i)
    {
        QLinearGradient linearGradient(0, 60 * i, 0, 60 * (i + 1));
        linearGradient.setColorAt(0.0, Qt::black);
        linearGradient.setColorAt(1.0, Qt::white);
        painter->setBrush(QBrush(linearGradient));
        painter->setPen(Qt::NoPen);
        painter->drawRect(0, 60 * i, 600, 60);
    }

    ii.save("1.png", "PNG");

垂直条纹图

cpp 复制代码
    QImage ii(600, 600, QImage::Format_ARGB32);
    ii.fill(Qt::transparent);
    QPainter *painter = new QPainter(&ii);
    painter->setRenderHint(QPainter::Antialiasing);

    // vertical
    for (int i = 0; i < 10; ++i)
    {
        QLinearGradient linearGradient(60 * i, 0, 60 * (i + 1), 0);
        linearGradient.setColorAt(0.0, Qt::black);
        linearGradient.setColorAt(1.0, Qt::white);
        painter->setBrush(QBrush(linearGradient));
        painter->setPen(Qt::NoPen);
        painter->drawRect(60 * i, 0, 60, 600);
    }

    ii.save("1.png", "PNG");

垂直旋转45度条纹图

cpp 复制代码
    QImage ii(600, 600, QImage::Format_ARGB32);
    ii.fill(Qt::transparent);
    QPainter *painter = new QPainter(&ii);
    painter->setRenderHint(QPainter::Antialiasing);

    // rotate45
    double allC = qSqrt(600 * 600 + 600 * 600) * 1.05;
    for (int i = 0; i < 15; ++i)
    {
        painter->save();
        QLinearGradient linearGradient(60 * i, 0, 60 * (i + 1), 0);
        linearGradient.setColorAt(0.0, Qt::black);
        linearGradient.setColorAt(1.0, Qt::white);
        painter->setBrush(QBrush(linearGradient));
        painter->setPen(Qt::NoPen);
        painter->rotate(45);
        painter->drawRect(60 * i, -allC / 2.0, 60, allC);
        painter->restore();
    }

    ii.save("1.png", "PNG");

带滚动的垂直条纹图

cpp 复制代码
    QImage ii(600, 600, QImage::Format_ARGB32);
    ii.fill(Qt::transparent);
    QPainter *painter = new QPainter(&ii);
    painter->setRenderHint(QPainter::Antialiasing);

    // vertical with roll
    for (int j = 0; j <= 60; )
    {
        for (int i = 0; i < (10 + 1); ++i)
        {
            QLinearGradient linearGradient(60 * i - j, 0, 60 * (i + 1) - j, 0);
            linearGradient.setColorAt(0.0, Qt::black);
            linearGradient.setColorAt(1.0, Qt::white);
            painter->setBrush(QBrush(linearGradient));
            painter->setPen(Qt::NoPen);
            painter->drawRect(60 * i - j, 0, 60, 600);
        }
        ii.save(QString("%1.png").arg(j), "PNG");
        j += 2;
    }

带滚动的垂直旋转45度条纹图

cpp 复制代码
    QImage ii(600, 600, QImage::Format_ARGB32);
    ii.fill(Qt::transparent);
    QPainter *painter = new QPainter(&ii);
    painter->setRenderHint(QPainter::Antialiasing);

    // rotate45 with roll
    double allC = qSqrt(600 * 600 + 600 * 600) * 1.05;
    for (int j = 0; j <= 60; )
    {
        for (int i = 0; i < (15 + 1); ++i)
        {
            painter->save();
            QLinearGradient linearGradient(60 * i - j, 0, 60 * (i + 1) - j, 0);
            linearGradient.setColorAt(0.0, Qt::black);
            linearGradient.setColorAt(1.0, Qt::white);
            painter->setBrush(QBrush(linearGradient));
            painter->setPen(Qt::NoPen);
            painter->rotate(45);
            painter->drawRect(60 * i - j, -allC / 2.0, 60, allC);
            painter->restore();
        }
        ii.save(QString("%1.png").arg(j), "PNG");
        j += 2;
    }

调整渐变颜色可生成彩色条纹图

相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超3 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int3 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
慧都小项3 天前
当边缘AI上产线:QtitanDocking 如何让工业 HMI 实现多视图协同
人工智能·qt·ui·边缘计算·qt6.3
CoderYanger3 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
伞伞悦读3 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
CCCCCCCCharlie3 天前
Linux进程控制四大核心操作
linux·开发语言