项目实战:Qt图像拼接渐进色图层生成工具v1.0.0(预设四路拼接,多路可通过多图叠层实现)

若该文为原创文章,转载请注明出处

本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146068951

长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

Qt开发专栏:项目实战(点击传送门)

需求

图像拼接需要过渡模板:

1.预设四路渐进色拼接

2.可单独一路或者多路,配合多图层算法,实现多路过度

3.可调整点过渡位置,过渡间隙

4.可调整点过渡颜色

5.6路/8路拼接可通过调整点位置和多图层渐进色实现

背景

公司自研产品过程中产出生产工具,无需求助美工或者懂切图,提升工作效率。

Demo:gardientColorTool_v1.0.0 windows运行包

CSDN粉丝0积分下载:https://mp.csdn.net/mp_download/manage/download/UpDetailed

QQ群:博主名or博客首页扫码进入QQ技术群,点击"文件"搜索"gardientColorTool",群内与博文同步更新)

核心源码

cpp 复制代码
void GradientPainterWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    // 绘制背景颜色
    drawBackground(&painter);
    drawImage(&painter);
    drawPoint(&painter);

    QWidget::paintEvent(event);
}

void GradientPainterWidget::drawBackground(QPainter *painter)
{
    painter->save();

    painter->setPen(Qt::NoPen);
    painter->setBrush(_backgroundColor);
    painter->drawRect(rect());

    painter->restore();
}

void GradientPainterWidget::drawImage(QPainter *painter)
{
    if(_image.isNull())
    {
        LOG << "if(_image.isNull())";
        return;
    }
    painter->save();

    painter->drawImage(rect(), _image);

    painter->restore();
}

void GradientPainterWidget::drawPoint(QPainter *painter)
{
    painter->save();

    painter->setPen(Qt::NoPen);
    painter->setBrush(QColor(0, 0, 0, 255));
    for(int index = 0; index < _listInterPointF.size(); index++)
    {
        painter->drawEllipse(_listInterPointF.at(index), _offset, _offset);
    }

    painter->restore();
}

void GradientPainterWidget::updatePoint()
{
    // 求交点
    _listInterPointF.clear();
    for(int index = 0; index < _listAngle.size(); index++)
    {
        double degrees = _listAngle.at(index);
        // 中心点延伸线
        double x = rect().center().x() - sin(qDegreesToRadians(degrees)) * rect().width();
        double y = rect().center().y() - cos(qDegreesToRadians(degrees)) * rect().width();
        QLineF line(QPoint(x, y), rect().center());
//        LOG << degrees << QPoint(x, y);
        for(int lineIndex = 0; lineIndex < _listBoundLineF.size(); lineIndex++)
        {
//            LOG << line << _listBoundLineF.at(lineIndex);
            QPointF interPos(0, 0);
            QLineF::IntersectType type = _listBoundLineF.at(lineIndex).intersect(line, &interPos);
            if(type == QLineF::BoundedIntersection)
            {
//                LOG << "inter" << interPos;
                _listInterPointF.append(interPos);
                break;
            }
        }
    }
}

void GradientPainterWidget::updateImage()
{
    if(_image.isNull())
    {
        LOG << "if(_image.isNull())";
        return;
    }
    _image = QImage(rect().width(), rect().height(), QImage::Format_ARGB32);

    QConicalGradient conicalGradient;
    conicalGradient.setCenter(rect().center());
    conicalGradient.setAngle(90);

    conicalGradient.setColorAt(0.0, _color0);
    conicalGradient.setColorAt(1.0, _color0);

    conicalGradient.setColorAt(_angle  / 360, _color);
    conicalGradient.setColorAt(_angle2 / 360, _color2);

    conicalGradient.setColorAt(_angle3 / 360, _color3);
    conicalGradient.setColorAt(_angle4 / 360, _color4);

    conicalGradient.setColorAt(_angle5 / 360, _color5);
    conicalGradient.setColorAt(_angle6 / 360, _color6);

    conicalGradient.setColorAt(_angle7 / 360, _color7);
    conicalGradient.setColorAt(_angle8 / 360, _color8);

    QPainter painter(&_image);
    painter.setPen(Qt::NoPen);
    painter.setBrush(conicalGradient);
    painter.drawRect(rect());

    update();
}

本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146068951

相关推荐
Ryan_Gosling3 小时前
QT-异步编程
开发语言·qt
信必诺8 小时前
GStreamer —— 2.2、Windows下Qt加载GStreamer库后运行 - “教程2:GStreamer 概念“(附:完整源码)
qt·gstreamer
宁静致远20218 小时前
qt 操作多个sqlite文件
qt·sqlite·嵌入式linux开发
laimaxgg9 小时前
Qt常用控件之表格QTableWidget
开发语言·前端·c++·qt·qt5·qt6.3
四维碎片11 小时前
Visual studio + Qt 项目配置管理
ide·qt·visual studio
结衣结衣.14 小时前
【Qt】自定义信号和槽函数
开发语言·c++·qt·c++11
勇敢滴勇1 天前
解决 Qt 项目中出现的OPENSSL_Uplink(00007FFA9E04EC88,08): no OPENSSL_Applink
开发语言·qt
M_Lin_1 天前
QT异步编程
开发语言·qt
宁静致远20212 天前
QT-自定义参数设计框架软件
qt·嵌入式开发·跨平台开发
m0_582481492 天前
qt作业day5
开发语言·qt