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;
}
调整渐变颜色可生成彩色条纹图

