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

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

相关推荐
冻柠檬飞冰走茶6 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing037 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊7 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
波力海苔夹心脆6758 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩8 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
Hhy_110710 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
starzy199010 小时前
深入理解Scala函数定义:从方法到函数的类型跨越
开发语言·scala
starzy199010 小时前
深入理解Scala递归函数:从栈溢出到尾调用优化
开发语言·scala
三*一11 小时前
Mapbox‑GL JS 多边形折点编辑工具:实现原理、功能拆解与踩坑总结
开发语言·javascript·ecmascript
YSL07012411 小时前
C++基础
开发语言·c++