我在《C++实现Photoshop图层颜色混合模式》和《C++实现Photoshop图层颜色混合模式(续)》2篇文章中实现了Photoshop颜色图层混合模式的基本功能,本文拟在此基础上进一步实现带Alpha通道的颜色图层混合模式,这样Photoshop的颜色图层混合模式就可以说被完整的实现了。
要实现带Alpha通道的32位颜色图层混合模式,比24位颜色图层混合模式复杂的多,后者只是前者的一个特例。因此本文代码作了全面修改,部分代码进行了优化,主要是将原代码在像素合成过程中的一些浮点运算全部改为整数运算,将某些整数除法改为移位运算等,这样可以使代码效率提高一些,但同时代码的可读性也有所下降。只是熊掌与鱼不可兼得,特别是图像像素级的处理,随便一个小小的改进会使得效率成倍提高(其实,本文像素处理代码中还存在的一些整数除法,也是可以全部优化掉的),另外,原处理代码要求2张图像尺寸一样大,现在可处理2张不同大小图像的颜色混合(最终合成大小为底层目标大小)。
下面是带Alpha通道的32位颜色图层混合模式的全部代码:
下面给出几张png图片测试效果图:
源图一(苹果) 源图二(雪花)
上面一排是雪花图为底层,苹果图为上层实现的颜色混合,从左到右,Alpha分别为100%、80%和50%。
下面一排是苹果图为底层,雪花图为上层实现的颜色混合,从左到右,Alpha分别为100%、80%和50%。
从左到右:雪花图100%Alpha红色染色,雪花图50%Alpha红色染色,苹果图100%Alpha蓝色染色。
另外,需要说明的是,在Photoshop的图层混合选项中,除了不透明度外,还有个填充数选项,二者的区别是:不透明度选项指的是图层本身而言,填充数选项是混合时本图层像素的填充比例。但实际上二者在本质上是一回事,也就是是说二者的乘积就是最终的填充不透明度。
由于本人水平有限,虽经改进,但错误在所难免,欢迎提出宝贵意见,邮箱地址:maozefa@hotmail.com
分享到:
相关推荐
图示讲解photoshop图层混合模式详解及算法实现详解 变暗混合模式 正片叠底 线型加深混合模式 线型减淡混合模式 差值混合模式 图层混合选项
用OpenCV实现Photoshop曲线算法C++源码 。
基于 VC 实现的 Photoshop颜色编辑器
使用MFC(C++)通过COM库,调用Photoshop的接口实现基本的操作。 文章地址参照:https://blog.csdn.net/ye8974/article/details/80978939
用OpenCV实现Photoshop算法:变为黑白图像 Photoshop提供了一个高级的黑白图像调整功能,可获得更好的黑白图像效果。可设置了 red, yellow, green, cyan, blue, magenta 六个颜色的灰度系数,调整黑白效果。
用OpenCV C++实现Photoshop色阶调整算法, 包含Levels类和demo例程
c++实现建造者模式,可直接运行
Photoshop 的色相/饱和度调整,可以对全图、红、黄、绿、青、蓝、洋红六个通道进行设置。每个通道可设置: 色相(hue), 饱和度(satuation), 明度(Lightness)三个调整值。 另包含 多个颜色空间转换函数
桥接模式 C++ 实现
策略模式的 C++ 代码实现, ide :XCode
本书以实现“我的Photoshop”项目的开发过程贯穿始终,通过大量实例,深入浅出地介绍了许多Visual C++ 6.0的编程技术及项目管理方法。所讲内容同时适用于Visual C++的其他版本。全书共10章涵盖了Windows编程的大部分...
介绍设计模式的23种模式,及vc6.0 下c++代码实现
23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅有一个实现文件,class均以inline方式实现。 23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅...
GoF 23种设计模式解析附C++实现源码(2nd Edition)
基于混合A-Star算法的停车路径规划C++实现源码.zip基于混合A-Star算法的停车路径规划C++实现源码.zip基于混合A-Star算法的停车路径规划C++实现源码.zip基于混合A-Star算法的停车路径规划C++实现源码.zip基于混合A-...
对于GoF设计模式的精解 内容翔实易懂,是不可多得的设计模式学习入门教材 用C++实现设计模式实例,语言通俗易懂
设计模式精解-GoF 23种设计模式解析附C++实现源码 常见设计模式的解析和实现(C++)高级资料
设计模式精解-GoF23种设计模式解析附C++实现源码,是系统学习设计模式,深入理解每种模式的原型,优缺点,适用的场景,达到灵活运用目的的最好参考书
参考多个资料,自己写的一个单件模式 参考多个资料,自己写的一个单件模式 参考多个资料,自己写的一个单件模式
C++ C#混合编程