使用CImage绘制半透明图片
最近对一个项目中的软件进行了一些界面性能的改进,我主要是用CImage替代了一些以前用GDI+实现的内容。
使用中发现CImage对半透明图片的绘制,是有问题的,半透的部分总是显示一些很奇怪的内容(颜色很突兀)。
后来经过仔细追查,终于找到了原因。
原因是这样的,CImage的默认绘制算法,对于目标点的计算算法是这样的:
displayColor = sourceColor + backgroundColor × (255 – alpha) / 255
而GDI+的绘制算法,对于目标点的计算算法是这样的:
displayColor = sourceColor × alpha / 255 + backgroundColor × (255 – alpha) / 255
很明显GDI+的算法效果要合理的多。如果按照CImage的算法处理,会有很多像素的RGB分量会超过255,和我看到的一些很奇怪的内容非常吻合。
按照以上算法,只需要对CImage的RGB分别乘以alpha再除以一个255,就可以让CImage的半透明绘制和GDI+一致了。
假设image是一个CImage的对象,里面包含待透明信息的图片信息,那么对这个对象进行一次下面这个操作就可以了:
if (image.GetBPP() == 32) //确认该图像包含Alpha通道
{
for (int i=0; i<image.GetWidth(); i++)
{
for (int j=0; j<image.GetHeight(); j++)
{
byte *pByte = (byte *)image.GetPixelAddress(i, j);
pByte[0] = pByte[0] * pByte[3] / 255;
pByte[1] = pByte[1] * pByte[3] / 255;
pByte[2] = pByte[2] * pByte[3] / 255;
}
}
}
事实表明,这样处理一下源图像后,之后的半透明绘制就很正常了。
使用CImage绘制半透明图片相关推荐
- MFC 绘制半透明图片
用MFC绘制半透明图片其实根本没有必要,因为有美工:哈哈,当然了我们自己练手的时候没有美工,自己也不会ps,只能用代码了 void 类名::DrawClearImage(Graphics *pGra ...
- java绘制半透明图片_如何使绘制的图像在Java中透明
正如另一个提到的答案,最简单的方法可能是简单地使用具有透明背景的PNG图像(您可以使用像GIMP这样的图像编辑器创建这些图像).或者,如果您仅限于具有纯色背景的PNG图像,以下是如何将PNG中的给定颜 ...
- QT半透明图片叠加显示
需求描述:两张图片,一张作为背景,另一张半透明,作为前景.透过前景可以看到背景图 1.用QPixmap对象载入背景图片,或者用paint代码在QPixmap自己画图:把QPixmap放入QLabel中 ...
- 【PYTHON】 Pilow 将半透明图片绘制到图片中
python 的pilow在将半透明图片复合到正常图片时,需要用到alpha_composite函数 两张图片都必须保留 alpha 通道,即 mode 为 RGBA,alpha 通道是保存图片透明度 ...
- ai 临摹图片换背景_AI临摹绘制插画图片
AI临摹绘制插画图片 1.打开AI,新建一个文档.开始绘制前,首先确定要画对象的透视参考线.观察原图就会找到基于立体的三维轴线(在这里,我们用X,Y,Z轴来表达). 2.先绘制出外边框,边框线的粗细为 ...
- python如何将图片的像素矩阵绘制成图片(python,matplotlib):TypeError: Invalid shape (1, 28, 28) for image data
矩阵变成图片,这个问题使用(python , matplotlib ) 可以轻松实现. import matplotlib.pyplot as plt #使用格式 plt.imshow(x)#其中x为 ...
- java canvas 画图片_[Java教程][HTML5] Canvas绘制简单图片
[Java教程][HTML5] Canvas绘制简单图片 0 2016-05-13 13:00:04 获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象 ...
- 【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )
文章目录 1. 位图渲染 BitmapShader 简介 ( 1 ) 位图渲染综述 ( ① 三种方式 : Shader.TileMode.CLAMP | Shader.TileMode.REPEAT ...
- 解决《Mobile绘制背景图片》中的问题
与PC平台的开发相比,Mobile的开发麻烦了许多,至少这是我的感觉 . 谢谢--" Fly Pig(^@^)" 的文章<Mobile开发(绘制背景图片) > http ...
最新文章
- 在命令行导出MySQL数据到Excel
- iOS 之 事件响应者链
- Matlab 线性规划问题模型代码
- HTML MIME Type
- 神经网络 梯度下降_梯度下降优化器对神经网络训练的影响
- 前端工程师应该达到什么水平,找工作薪资才比较高?
- suitecrm配置(nginx设置)
- 手机屏坏了怎么把里面存东西取出来_手机又卡了,到底是运行不够还是存储容量不足?1分钟搞懂...
- 如何安装Vscode软件及设置成中文界面?
- 更改ubuntu的mysql版本为指定版本
- mac安装gnu make_Linux Make的使用以及命令安装详解
- js模板引擎template.js的使用
- dos批处理脚本自动添加网络共享打印机-简单版且亲测可用
- 【预测模型-RF预测】基于随机森林算法实现数据回归预测附matlab代码
- 模拟游戏--鸭子的种类
- PCB 生产过程中对铜面氧化的防范手段
- CentOS上安装 Docker-CE以及Docker 加速器配置
- 原光明中医函授大学教材
- php下载列表如何实现,phpcms v9 列表页直接下载功能代码实现
- Wiradius计费系统功能说明
热门文章
- WORD 如何在方框里打勾?
- 列表是不是python数据类型的是_在Python中,一个列表中的数据类型是否可以不相同?(回答可以or不可以)...
- UnhandledPromiseRejectionWarning报错send()的处理
- mysql面向对象例子_PHP 面向对象实例:获取数据库用户数据
- python函数控制词典_Python 基础之集合相关操作与函数和字典相关函数
- html5video标签属性,H5中video标签那些属性和方法
- python字典是什么的集合_Python中的字典和集合
- python apriori算法 sklearn_R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好?...
- python必须下载到c盘吗_python为什么要安装到c盘
- python paramiko exec_command()和invoke_shell()