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

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

相关推荐
言乐62 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
WWJA王文举9 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
zhanghaha131410 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
qq_4480111611 小时前
C语言中的动态内存分配
c语言·开发语言·php
汉字萌萌哒12 小时前
2024CSP-J入门级C++真题详解
开发语言·c++
arbboter12 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
汉字萌萌哒13 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
叠层归一研究院13 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
小雨笙笙14 小时前
C语言:变量三属性——存储类型
c语言·开发语言
果果燕14 小时前
C++ 学习笔记(二):类与对象—— 构造函数与析构函数
开发语言·c++