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;
    }

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

相关推荐
蓝悦无人机2 小时前
C++基础 — 函数总结
开发语言·c++
糖果店的幽灵2 小时前
langgraph的 MessagesState 解读
java·开发语言·人工智能·windows·langgraph
Fu_Lin_2 小时前
Qt 嵌入式从零基础到精通总纲
开发语言·qt·嵌入式·qt嵌入式
星空露珠3 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
码云数智-大飞3 小时前
PHP 接口开发规范:统一返回格式、异常处理与参数校验
开发语言·php
浮江雾3 小时前
Flutter第十七节-----路由管理(3)
android·开发语言·前端·javascript·flutter·入门
admin and root3 小时前
「移动安全」安卓APP 反编译&frida脱壳技巧分享
android·开发语言·python·web安全·微信小程序·移动安全·攻防演练
dadaobusi3 小时前
仿真边界处理
开发语言·php
踏月的造梦星球4 小时前
DM8 DSC 单机双实例部署
运维·开发语言·数据库