项目实战: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

相关推荐
15942315631 分钟前
QT使用WxSQLite3打开加密数据库并查询
数据库·qt·sqlite
派阿喵搞电子7 小时前
在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
c++·qt·ubuntu·ui
笨笨马甲11 小时前
Qt Quick模块功能及架构
开发语言·qt
姜君竹12 小时前
QT的工程文件.pro文件
开发语言·c++·qt·系统架构
奇树谦12 小时前
使用VTK还是OpenGL集成到qt程序里哪个好?
开发语言·qt
AAA废品回收站陈师傅15 小时前
68常用控件_QGroupBox的使用
qt
明月醉窗台15 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go16 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
奥修的灵魂19 小时前
QT进阶之路:带命名空间的自定义控件在Qt设计器与qss中的使用技巧
qt·命名空间
笨笨马甲1 天前
附加模块--Qt OpenGL模块功能及架构
开发语言·qt