本帖最后由 Jy倾恋 于 2017-11-12 21:36 编辑
好久没在论坛发过帖了 这次开源下这前研究一个项目时用到的部分代码 ================分割线=================
去黑底的图片分两种
1.纯黑白(没有其他RGB颜色的图) 2.一种色有除黑白外其他颜色的图片
无论是那种图,其去黑底的原理都是 “越黑的像素越透明”。只是实现的细节上有区别。
对于 1.纯黑白的处理就简单多了,所有像素设置成RGBA(1,1,1, (R+G+B)/3) 即可。
2.多彩色的图片,不能使用纯黑白的处理,否则所有图都会变成黑白,其原理是找出原像素点中RGB分量中最高的值 maxV =Max(R,G,B),一般其透明度就是该值maxV。
因为其他值相对maxV比较少,所以RGB分别加上 255-maxV 的差值,其原理是将该像素点"变亮"了,从而取消了黑底对该像素点的影响。而黑底将转化为透明度 而使用多彩色图片转换的算法对纯黑白的支持也不太好, 有可能会残留灰底,其原因是 有可能在美工做图时 没有真正地使用"纯灰度",也就是说 rgb 的分值不是相等的,这里对2种图片分别做了处理。
效果图
附件如下: 调用了模块 GDIPlus类 [附上源码] |