QPainter类的CompositionMode各值含义

Qt 画图工具擦除操作,恢复透明色 在以transparent填充的QPixmap上用红色画笔画出了线,现需要擦除部分红色,恢复出原来的透明色。 使用QPainter::CompositionMode 图像叠加模式 下图简单示意了10种模式: 在Qt的官方文档里我们也找到了具体模式的解释 Constant Value Description QPai... 阅读详情
AI摘要

本文详细解读了QPainter::CompositionMode枚举在Qt中的图像混合原理,通过实例演示了SourceOver、DestinationOver、Source、Destination等模式下的源目标图像交互,以及它们在透明度和重叠区域的混合效果。

QPainter类的QPainter::CompositionMode枚举用于说明源图像和目标图像怎样合成显示,一般用于图像的混合,其实在OPenGL中也有混合的技术,和QPainter类的QPainter::CompositionMode大同小异,思想类似。
Qt官方手册Assistant对QPainter::CompositionMode枚举的解释,没有真正在项目中实战用过QPainter::CompositionMode的童鞋来说,理解起来很费劲,网上的资料也是你抄我,我抄你的,真正弄懂、有价值的很少。今天我以示例和OPenGL中有关的阐述来讲解这几个枚举。
目标图像
目标图像是划定的绘制设备像素所在区域(如:窗体、图片或窗体图片的一部分区域)或上次绘制的图像。前者是初次绘制时,如:初次想在窗体区域上绘制,此时窗体区域什么都没有,则目标图像是指窗体、图片中程序划定的要绘制区域所在像素。后者指在窗体或图像上已经绘制过图像。
源图像
源图像是指最新、最近绘制的图像。如:起始绘制了a图像到窗体上(此时窗体所在像素形成的区域是目标图像,a图像是源图像),当a绘制完后,又在a的上面绘制了b图像,则b成为源图像,a成为目标图像。
总结:把将要画上去的图像称为“源图像”,把原来的图像称为“目标图像”。

  1. QPainter::CompositionMode_SourceOver
    该模式是默认模式,使用该模式时,源图像如果和目标图像有重叠,绘制时,则重叠部分是源图像在目标图像上面(源遮挡住目标),重叠部分源的RGBA值和重叠部分目标的RGBA值进行混合,没有重叠部分各自保留即都绘制出来。假定源和目标的混合因子为:
    Sr、Sg、Sb、Sa
    Dr、Dg、Db、Da
    其中Sr表示源的R分量的混合因子,Dr表示目标的R分量的混合因子,Sa表示源的alpha混合因子,Da表示目标的alpha混合因子,其它依次类似,相应地表示四元组RGBA的缩放因子。
    一般地,源图像和目标图像重叠部分按照下述公式进行颜色的混合:
    ( Rs* Sr + Rd*Dr , Gs*Sg + Gd*Dg, Bs*Sb + Bd*Db, As*Sa + Ad*Da ) ----公式1
    其中RGBA的下标s和d分别表示源的RGBA值和目标的RGBA值。将上述结果相乘相加后进行截取,以保证值在[0, 255]闭区间。如下代码:
#include <QtWidgets/QWidget>
#include "ui_compositionModeDemo.h"
#include<QPainter>
#include <QImage>
class compositionModeDemo : public QWidget
{
    Q_OBJECT

public:
    compositionModeDemo(QWidget *parent = Q_NULLPTR);

private :

    void paintEvent(QPaintEvent *event)override;
private slots:

	void srcAlphaValueChanged(int newAlphaValue);

	void destAlphaValueChanged(int newAlphaValue);
private:
    Ui::compositionModeDemoClass ui;
	QImage* firstImage = nullptr;
	QImage* secondImage = nullptr;
	int m_srcAlpha{255};
	int m_destAlpha{ 255 };
};

#include "compositionModeDemo.h"

compositionModeDemo::compositionModeDemo(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

	connect(ui.srcAlphaSlider, SIGNAL(valueChanged(int)), this, SLOT(srcAlphaValueChanged(int)));
	connect(ui.destAlphaSlider, SIGNAL(valueChanged(int)), this, SLOT(destAlphaValueChanged(int)));
	firstImage = new QImage(500, 500, QImage::Format_ARGB32_Premultiplied);
	secondImage = new QImage(500, 500, QImage::Format_ARGB32_Premultiplied);
 
}

void compositionModeDemo::destAlphaValueChanged(int newAlphaValue)
{
	m_destAlpha = newAlphaValue;
	update();
}

void compositionModeDemo::srcAlphaValueChanged(int newAlphaValue)
{
	m_srcAlpha = newAlphaValue;
	update();
}

void compositionModeDemo::paintEvent(QPaintEvent *event)
{
	//绘制第一张图片
	QPainter painterFirst(firstImage);
	firstImage->fill(Qt::transparent);//设置透明
	painterFirst.setBrush(QColor(255, 0, 0, m_destAlpha));
	painterFirst.drawRect(50, 50, 100, 100);

	//绘制第二张图片
	QPainter painterSecond(secondImage);
	secondImage->fill(Qt::transparent);
	painterSecond.setBrush(QColor(0, 0, 255, m_srcAlpha));
	painterSecond.drawRect(100, 100, 100, 100);

	//设置图片的重叠模式
	painterFirst.setCompositionMode(QPainter::CompositionMode_SourceOver);
	//重叠图片
	painterFirst.drawImage(0, 0, *secondImage);

	//展示图片
	QPainter painter2(this);
	painter2.drawImage(0, 0, *firstImage);
 
}

第一次绘制的红色矩形为目标,第二次绘制的蓝色矩形为源,采用的模式为QPainter::CompositionMode_SourceOver,则效果如下:
SourceOver效果图

通过调节源alpha的滑块,改变其值,如下为源alpha为111时的效果:
在这里插入图片描述
如下为源apha为0即源完全透明的效果,即能透过源看到后面的目标:
在这里插入图片描述
当源的alpha为0时,公式1源和目标合成后的图像的alpha只有目标 Ad*Da 值了。然后保持源的alpha滑块在最大值255处不变,调节目标的alpha到中间,如下为目标的alpha为92的情况:
在这里插入图片描述
如下为目标的alpha为0的情况:
在这里插入图片描述
将上述cpp中第39行代码改为如下:

painterSecond.drawRect(200, 200, 100, 100);

以便目标和源不重叠,则输出如下,即源和目标都显示:
在这里插入图片描述
调节源和目标各自的alpha,都只对自己的透明度有影响。

可以看到:

  • 源图像如果和目标图像有重叠,绘制时,则重叠部分是源图像在目标图像上面(源遮挡住目标),当源的alpha为255时,目标被源完全遮挡。

  • 重叠部分RGBA值按公式1进行进行混合,混合之后得出的RGBA值为重叠部分的RGBA值。

  • 没有重叠部分各自保留即都绘制出来。
    2. QPainter::CompositionMode_DestinationOver
    将上述cpp代码中的第42行改为QPainter::CompositionMode_DestinationOver,则:

  • 源图像如果和目标图像有重叠,绘制时,则重叠部分是目标图像在源图像上面(目标遮挡住源),当目标的alpha为255时,源被目标完全遮挡。。

  • 重叠部分的源和重叠部分的目标按公式1进行进行混合,混合之后得出的RGBA值为重叠部分的RGBA值。

  • 没有重叠部分各自保留即都绘制出来。
    注意:和QPainter::CompositionMode_SourceOver的区别,唯一的区别是当源和目标有重叠时,目标盖住源,该模式是QPainter::CompositionMode_SourceOver的的逆操作。如下为源和目标的alpha都为255时的效果:
    在这里插入图片描述
    如下为源alpha为255,目标alpha为168效果:
    在这里插入图片描述
    如下为源alpha为255,目标alpha为0效果,即目标完全透明,能透过目标看到后面的源:
    在这里插入图片描述
    将上述cpp中第39行代码改为如下:

painterSecond.drawRect(200, 200, 100, 100);

以便目标和源不重叠,则输出如下,即源和目标都显示:
在这里插入图片描述
调节源和目标各自的alpha,都只对自己的透明度有影响。

3.
QPainter::CompositionMode_Source

将上面cpp代码的第42行改为QPainter::CompositionMode_Source,则:

  • 无论什么情况,都只显示源,不显示目标,目标就像不存在、没绘制一样。如下为源和目标的alpha都为255的效果:
    在这里插入图片描述
    如下为源的alpha为0,目标alpha为255的效果:
    在这里插入图片描述可以看到,即使源完全透明,依然看不到目标。

4.QPainter::CompositionMode_Destination
将上面cpp代码第42行换为:QPainter::CompositionMode_Destination,则:

  • 无论什么情况,都只显示目标,不显示源,源就像不存在、没绘制一样,该模式是QPainter::CompositionMode_Source逆操作。如下为源和目标的alpha都为255的效果:
    在这里插入图片描述
    如下为目标的alpha为0,源alpha为255的效果:
    在这里插入图片描述
    可以看到,即使目标完全透明,依然看不到源。

5.QPainter::CompositionMode_SourceIn
将上面cpp代码第42行换为:QPainter::CompositionMode_SourceIn,则:

  • 如果目标和源有重叠,则只显示重叠部分中的源区域,不显示重叠部分的目标区域。目标和源不重叠部分都剔除、都不显示,
  • 如果目标和源不重叠,则什么都不显示,不绘制,就像源和目标不存在一样。
  • 目标和源重叠部分图像的alpha受到目标alpha的影响而削减(具体计算公式暂不清楚,知道的可以留言给我)。

如下为源和目标的alpha值都为255的结果:
在这里插入图片描述
如下为源的alpha值为255, 目标alpha值为0的结果:

在这里插入图片描述
如下为源的alpha值为0, 目标alpha值为255的结果:

在这里插入图片描述
如下为源的alpha值为0, 目标alpha值为0的结果:
在这里插入图片描述

如下为源的alpha值为128, 目标alpha值为133的结果:
在这里插入图片描述
将上述cpp中第39行代码改为如下:

painterSecond.drawRect(200, 200, 100, 100);

以便目标和源不重叠,则输出如下,即什么都不显示:
在这里插入图片描述

6.QPainter::CompositionMode_DestinationIn
将上面cpp代码第42行换为:QPainter::CompositionMode_DestinationIn,则:

  • 只显示目标和源重叠部分中的目标部分,不显示重叠部分的源部分。目标和源不重叠部分都剔除、都不显示,
  • 如果目标和源不重叠,则什么都不显示,不绘制,就像源和目标不存在一样。
  • 目标和源重叠部分图像的alpha受到源的alpha的影响而削减(具体计算公式暂不清楚,知道的可以留言给我)。
  • 该模式是QPainter::CompositionMode_SourceIn的逆操作。
    如下为源和目标的alpha值都为255的结果:
    在这里插入图片描述
    如下为源的alpha值为255, 目标alpha值为0的结果:
    在这里插入图片描述
    如下为源的alpha值为0, 目标alpha值为255的结果:
    在这里插入图片描述
    如下为源的alpha值为0, 目标alpha值为0的结果:
    在这里插入图片描述
    如下为源的alpha值为128, 目标alpha值为116的结果:
    在这里插入图片描述
    将上述cpp中第39行代码改为如下:
painterSecond.drawRect(200, 200, 100, 100);

以便目标和源不重叠,则输出如下,即什么都不显示:
在这里插入图片描述

7.QPainter::CompositionMode_SourceOut
将上面cpp代码第42行换为:QPainter::CompositionMode_SourceOut,则:

  • 如果源和目标有重叠,则输出全部的源,但源和目标重叠部分默认完全透明,属于目标但不属于目标和源重叠的部分不输出。此时目标alpha对重叠部分的alpha有影响即目标透明度影响重叠区域透明度;当目标alpha值为255即完全不透明时,源alpha对重叠区域alpha无影响,即此时源的透明度不影响重叠区域的透明度;当目标alpha值不为255即部分透明时,源alpha对重叠区域的alpha有影响,即此时源的透明度影响重叠区域透明度。
  • 如果源和目标没有重叠,则输出全部源,不输出目标。此时目标透明度对源没有影响,这种情况下和QPainter::CompositionMode_Source相同。
    如下为源和目标有重叠,且源alpha值为255, 目标alpha值为255的结果,可以看到重叠区域完全透明,
    在这里插入图片描述
    保持源alpha为255不变,分别调小目标的alpha为154、0,可以看到重叠区域受到目标透明度的影响:
    在这里插入图片描述
    在这里插入图片描述
    保持目标alpha为255不变,分别调小源的alpha为103、38,可以看到重叠区域不受源透明度影响,此时源透明度只影响属于源自身但不属于重叠部分的源区域:

在这里插入图片描述
在这里插入图片描述
将目标alpha为135,源的alpha调为91、209,结果分别如下:
在这里插入图片描述
在这里插入图片描述
将上述cpp中第39行代码改为如下:

painterSecond.drawRect(200, 200, 100, 100);

即让源和目标不重叠,结果如下:
在这里插入图片描述
此时调节目标的alpha对源的透明度没任何影响。
8.QPainter::CompositionMode_DestinationOut
将上面cpp代码第42行换为:QPainter::CompositionMode_DestinationOut,则:

  • 如果源和目标有重叠,则输出全部目标,但源和目标重叠部分默认完全透明,属于源但不属于源和目标重叠的部分不输出。此时源alpha对重叠部分的alpha有影响即源透明度影响重叠区域透明度;当源alpha值为255即完全不透明时,目标alpha对重叠区域alpha无影响,即此时目标的透明度不影响重叠区域的透明度;当源alpha值不为255即部分透明时,目标alpha对重叠区域的alpha有影响,即此时目标透明度影响重叠区域透明度。
  • 如果源和目标没有重叠,则输出全部目标,不输出源。此时源透明度对目标没有影响,这种情况下和QPainter::CompositionMode_Destination相同。该模式是CompositionMode_SourceOut.模式的逆操作。
    结果就是把CompositionMode_SourceOut.蓝色截图换成红色就行。

9.QPainter::CompositionMode_SourceAtop
将上面cpp代码第42行换为:QPainter::CompositionMode_SourceAtop,则:

  • 输出全部目标。
  • 如果源和目标有重叠,则只输出源重叠部分,且源重叠部分在目标的上面即遮挡住目标。源和目标不重叠的部分不输出。
  • 如果源和目标没有重叠,则只输出全部的目标,不输出源。
    如下为目标的alpha为255,源alpha为255时的效果::
    在这里插入图片描述
    重叠部分中,源在目标上面(遮挡住目标),重叠部分像素值由源和目标混合得出,源的alpha受到目标像素的alpha而削减。
    如下为目标的alpha为0,源alpha为255时的效果:
    在这里插入图片描述
    如下为目标的alpha为255,源alpha为0时的效果:
    在这里插入图片描述
    如下为目标的alpha为128,源alpha为128时的效果:
    在这里插入图片描述
    将上述cpp代码中的39行改为如下,即源和目标不重叠
    painterSecond.drawRect(200,200, 100, 100);
    则效果如下:
    在这里插入图片描述
    可以看到只输出目标,没有输出源。

10.QPainter::CompositionMode_DestinationAtop
将上面cpp代码第42行换为:QPainter::CompositionMode_DestinationAtop,则:

  • 输出全部源。
  • 如果目标和源有重叠,则只输出目标重叠部分,且目标重叠部分在源上面即遮挡住源。目标和源不重叠的部分不输出。
  • 如果目标和源没有重叠,则只输出全部的源,不输出目标。
  • 该模式是QPainter::CompositionMode_SourceAtop的逆操作。

截图略。
11 QPainter::CompositionMode_Xor
源(其alpha值与目标alpha值的倒数成反比)与目标合并,该目标的alpha值与源alpha的倒数成反比。
截图略
12.QPainter::CompositionMode_Clear
源和目标无论在什么情况下都不显示,就像源、目标不存在一样。

总结:

  • Qt总共有35种组合模式,但是很多不常用,所以本文就没再描述说明,当用户需要研究时,可以将上面cpp代码42行换成你要的模式,进行研究。
  • 上面很多有关alpha减小、混合的内容,应该都有相应的公式的,但qt官方没有给出,这属于图形图像学的内容,OPengl中有一些,但和Qt的还是有些不同,如果读者知道这些混合方面的,alpha方面的公式,可以和我留言。

参考资料:
【1】:《 OpenGL编程指南(原书第7版)》 6.1节 混合。
【2】:QT多张图片的重叠显示

Qt QPainter CompositionMode解读及图片透明度设置 文章目录前言研究相关QPainter::CompositionModeQPainter::CompositionMode_SourceOverQPainter::CompositionMode_SourceQPainter::CompositionMode_DestinationIn调节图片透明度写在最后 前言 Qt的QPainter十分强大,设置不同的组合模式,可以得到迥然不同的结果,比如调节图... 阅读详情

相关推荐

QPainter CompositionMode实战:从原理到UI特效的混合艺术

本文深入探讨了QPainter CompositionMode的核心原理与实战应用,通过丰富的代码示例展示了如何利用不同混合模式实现UI特效。从基础的SourceOver到高级的Xor模式,详细解析了各种混合场景下的最佳实践,并提供了性能优化方案和常见问题解决方法,帮助开发者掌握Qt绘图系统中的混合艺术。

weixin_33824385的博客 143

QT图片叠加CompositionMode效果一览

QPixmap tmpPix(pix.size()); tmpPix.fill(Qt::transparent); QPainter p1(&amp;tmpPix); p1.setCompositionMode(QPainter::CompositionMode_Source); p1.drawPixmap(0, 0, pix); if (canBuild)//可建则用半透明表示 { //20...

chduguxue的专栏 7215

Qt图像叠加模式全解析:24种QPainter CompositionMode源码走读

像素级图像合成是GUI开发和图像处理中的基础能力,其核心在于如何把源图像与目标图像的每个像素按规则混合,透明通道的存在更让这一过程充满变数。Qt为此在QPainter中内置了24种合成模式(CompositionMode),从常见的SourceOver到用于擦除的DestinationOut,每种模式都有严格的数学定义与应用场景。官方提供的Composition Modes示例,通过一个窗口直观展示全部模式的视觉效果,并揭示了底层实现的关键细节,包括QPainter绘制顺序对结果的影响、QImage格式与预

weixin_32724679的博客 302

Qt:玩转QPainter序列三(合成模式)

填充图像为黑色,同时在支持 Alpha 通道的图像格式下,该黑色会被设置为完全透明的黑色。: 填充图像为完全透明,通常用于清除图像内容。

m0_71489826的博客 2020

从Photoshop图层混合到Qt绘图:图解QPainter::CompositionMode的12种核心模式

本文深入解析Qt框架中的QPainter::CompositionMode,对比Photoshop的12种核心图层混合模式,提供从基础到高级的实战应用指南。通过代码示例和视觉对比,详细讲解SourceOver、Multiply等模式的实现原理及适用场景,帮助开发者高效实现图形混合效果,提升UI设计质量。

weixin_32175665的博客 275

从Photoshop图层混合到Qt绘图:搞懂QPainter CompositionMode的底层逻辑

本文深入解析了Qt绘图引擎中QPainter::CompositionMode的底层逻辑,对比Photoshop图层混合模式,详细介绍了源图像与目标图像的合成原理及常见混合模式的数学实现。通过代码示例展示了SourceOver、Multiply和Screen等核心混合模式的应用,帮助开发者掌握跨平台图像合成技术。

weixin_30000735的博客 328

NodeGui 之 QPainter CompositionMode 枚举:从混合模式到光栅操作的全量指南

本文以 NodeGui 仓库中自动生成的 API 文档 [compositionmode.md](https://link.gitcode.com/i/c88597e3b763ea0abf59b95ce6bd1cba) 为主体,系统梳理 `CompositionMode` 枚举的全部 38 个成员及其数值定义,并结合仓库中 [QPainter.ts](https://link.gitcode.co

gitblog_00585的博客 347

从Photoshop图层混合到Qt绘图:图解QPainter CompositionMode的实用场景

本文深入探讨了Qt中QPainter的CompositionMode如何实现类似Photoshop的图层混合效果,帮助开发者将设计思维转化为编程实现。通过详细的代码示例和实用场景分析,展示了SourceOver、Multiply、Screen等核心混合模式的应用技巧,并提供了性能优化建议和创意扩展思路。

weixin_30047059的博客 284

Qt QPainter CompositionMode

Qt QPainter的CompositionMode的应用、给图片添加遮罩

liberty1997的博客 1508

QT实现窗体的局部区域透明

1、主要思路先实现窗体的整体透明,再使用 QPainter::CompositionMode_Clear属性实现窗体的局部透明。 2、 this->setAttribute(Qt::WA_TranslucentBackground); this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); this->installEventFilter(this); void paintEvent(QP

小米的修行之路 2825

5.4 磁悬浮轴承控制系统仿真:在MATLAB/Simulink中搭建包含功放、传感器模型的闭环系统模型,进行稳定性与动态性能仿真

磁悬浮轴承控制系统仿真方法 摘要:磁悬浮轴承控制系统仿真需建立包含转子动力学、传感器、控制器、功率放大器和电磁执行器的高保真非线性模型。通过MATLAB/Simulink搭建闭环系统,重点建模传感器带宽限制与噪声、功放饱和特性以及电磁力非线性。仿真分析包括时域阶跃响应、扰动抑制测试,频域稳定性分析(伯德图、奈奎斯特图),以及参数摄动下的鲁棒性验证。关键要验证控制算法在非线性因素影响下的稳定性和动态性能,为实际系统实现提供可靠依据。仿真中需特别注意物理量单位一致性和数字控制离散化效应。

技术工作者 1108

QPainter::CompositionMode解析

本文详细介绍了图像处理中的像素合成模式,分为三大类: Porter-Duff合成模式(12种)、Photoshop混合模式(12种)、位运算混合模式(16种)

友善啊,朋友的博客 1423

硬件开发流程

研发流程在一个有一定规模的企业中起到了非常重要的作用,也是一个产品或者项目成功量产出货依赖的平台体系,作为工程师如果想要走的更远,就必须了解流程体系,了解如何对产品的开发质量进行更好的管控。...

weixin_44126796的博客 8381

Qt QPainter基本绘图

Qt QPainter基本绘图QPenQBrush渐变填充QFont基本图形元件QPainterPathQPainter::CompositionMode实例1 QPainter绘图操作类。 QPainterDevice使用QPainter绘图的抽象二维界面(绘图设备),包括QWidget、QPixmap、QImage等。 QPaintEngine给QPainter提供不同设备绘图的接口,QPainter和QPainterDevice内部使用,创建自己的设备类型时才需要。 paintEvent使用QWidg

yxqq378287007的博客 1190

FOC实战笔记:RC吸收电路的设计考量与参数调优

本文深入探讨了FOC驱动器中RC吸收电路的设计与调优。针对MOS管开关过程中的电压尖峰问题,详细阐述了RC电路的钳位与能量吸收原理,并提供了从参数计算、实验调试到布局布线的完整实战指南,旨在帮助工程师有效提升系统可靠性与稳定性。

weixin_29219539的博客 275

淘宝x-mini-wua生成机制与硬件信息关联性深度解析

本文深度解析了淘宝x-mini-wua的生成机制与硬件信息的关联性,详细介绍了其作为设备指纹令牌的核心作用及技术实现细节。通过分析基础硬件层、环境特征层和行为特征层的数据采集,揭示了淘宝如何利用AES加密和分级加密策略防止破解,并探讨了其安全防护与对抗策略。

weixin_29243279的博客 230

NodeGui 中的 QPainter:在 Qt Widgets 上绘制 2D 图形的完整实战指南

本指南聚焦 NodeGui 对 Qt 绘图引擎 `QPainter` 的 TypeScript/JavaScript 封装,讲解如何在原生桌面应用中通过监听 Paint 事件在窗口与控件上绘制文本、图形、图像,并结合仓库源码剖析其 N-API 桥接实现。读完本文,你将掌握 QPainter 的构造方式、全部绘图 API 的签名与默认值、状态保存/变换矩阵等进阶用法,并能直接写出可运行的绘制代码。

gitblog_00313的博客 209

3D Slicer中文教程(三)—数据加载及保存方式

1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开。 ——多种方式加载大量数据。 有关DICOM数据,请参阅DICOM模块文档。 对于几乎所有其他(包括场景),您可以使用添加数据对话框。 有关支持的数据格式的列表,请参阅此列表。 请注意,仅部分支持列出的某些格式。 ——对于一些更复杂的格式(特别是DWI),建议首先使用DICOM到n...

weixin_33676492的博客 5536

Qt图像合成模式全解析:QPainter CompositionMode源码与工程实践

图像合成是图形图像处理的基础技术,它通过逐像素的混合运算,将源图像与目标图像按特定规则叠加。在Qt框架中,QPainter::setCompositionMode提供了从SourceOver到Exclusion等十余种合成模式,其背后是透明度通道和颜色通道的数学计算。理解这些模式的原理,不仅能解释不同模式呈现出的视觉效果,还能帮助开发者应对跨平台、跨渲染后端时表现不一致的难题。无论是图层合成工具、截图标注、图片编辑器,还是地图瓦片拼合,混合模式都扮演着关键角色。本文以Qt官方Composition Mode

weixin_33806859的博客 207

【牛客算法】小美的数组删除

本文分析了小美数组删除问题的解法,提出了一种逆向遍历求MEX的优化算法。该算法通过从数组末尾开始遍历,逐步构建子数组集合,利用MEX的单调性和增量更新特性,在O(n)时间复杂度内计算所有可能删除方案的最小代价。关键设计包括:1)逆向遍历实现MEX状态继承;2)利用HashSet快速判断元素存在;3)动态比较删除前j个元素和删除整个子数组的代价。算法空间复杂度为O(n),适用于大规模数据。代码实现简洁高效,已被验证为同类问题的最优解之一。

字节卷动 1337

【应用】什么是Azure?一文读懂微软云的核心逻辑与全球版图

作为微软的核心云计算服务平台,Azure不仅是数字化转型的引擎,更是全球企业在构建、扩展与优化IT基础设施时的首选平台。在这篇文章中,我们将深入探讨Azure云服务平台的各个方面,涵盖其核心优势、架构、功能、应用场景以及未来发展趋势。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1959

QPainter 的成员构成

QPainter 的成员构成

xie__jin__cheng的博客 349

从数据读取到业务事件:理解 ABAP CDS 视图的目的与选型(含 RAP、扩展与分析场景)

CDS视图在SAP S/4HANA中不仅是数据查询工具,更是语义模型和运行时能力的载体。它通过分层架构(基础视图、组合视图、消费视图等)实现数据复用与场景适配,支持UI、分析、事务处理等多样化消费。视图类型包括提供数据访问的接口视图(I_前缀)、消费视图(C_前缀)和事务视图,以及不提供数据访问的扩展视图。这种分层设计确保了数据模型的稳定性与扩展性,同时支持自定义字段和上下文感知分析。正确理解CDS视图的用途和分层规则,能帮助开发者构建更健壮、可维护的SAP应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 302

QPainter图像混合

当QPainter绘画多个图片的时候,可以通过内置的算法混合各个图像的效果。 做一个简单的例子。 void CompositionDialog::paintEvent(QPaintEvent *event) { QImage image; image.load("D:/pic/opencv-logo.png"); QImage image2; image2.load("D:/pic/lena.jpg"); QPainter painter(this);

islinyoubiao的专栏 641

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Qt QPainter图像合成模式详解:从CompositionMode原理到实战移植

在图形界面与图像处理开发中,像素级混合是图层叠加、滤镜效果和自定义控件绘制的基础能力。Qt 通过 QPainter 提供了一套完整的合成模式(CompositionMode),涵盖 Porter-Duff 覆盖规则、Photoshop 风格混合算法与光栅操作,让开发者无需手写像素公式即可实现丰富的视觉效果。理解这些模式背后的数学原理,以及 QImage 在 ARGB32 格式下的 alpha 通道行为,是正确使用 SourceOver、Multiply、Plus 等模式的关键。无论是制作图像编辑器的图层混合

weixin_31956641的博客 114

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

QImage, QPainter复合模式绘图 图片叠加模式 setCompositionMode

Qt的QPainter::CompositionMode提供了多种图像叠加的模式。常见的有QPainter::CompositionMode_SourceOver, QPainter::CompositionMode_SourceAtop, QPainter::CompositionMode_DestinationOver和QPainter::CompositionMode_Destination...

SmallBottle-CGWLMX的博客 7234

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: Qt Examples之imagecomposition工程分析
下一篇: C++/C宏定义中## 连接符与# 符的含义
荆楚闲人
博客等级 码龄20年 3万+粉丝 473原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值