首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

图和“去除”黑色背景(2D游戏中,将黑色背景特效图片改成透明通道的特效图片)解决方案

2012-02-08 
图和“去除”黑色背景(2D游戏中,将黑色背景特效图片改成透明通道的特效图片)不是简单的之去掉黑色。应为我刚

图和“去除”黑色背景(2D游戏中,将黑色背景特效图片改成透明通道的特效图片)
不是简单的之去掉黑色。
应为我刚刚进入这个领域,所以问题描述起来比较繁琐,希望各位看官见谅。

首先我理解的简单的去掉黑色背景就是:所有是黑色的像素设置成透明。这样大多数情况都够用了。

现在问题是这样:
有一张特效图片,很复杂的渐变粒子什么的,本来如果是透明的png我可以在任意背景上直接画画的。
但是我现在获取到的特效图片本身就是黑色背景了,如果用前面说的 “简单的去除黑色背景”,那么黑导致特效的效果完全不是那么回事,会有很多是“黑色”(像素的值不等于(255,255,255))的像素中“黑”没有去掉。

应该是这样:透明背景的特效图片 画到 黑色背景 上 = 我现在手头的图片
常规的去背景是: 将 我手头的图片 的 黑色像素 设置成透明 = 透明背景的特效图片
按道理来说是应该有效的,但是得到的结果是特效图多了很多黑色杂质,,,

或者说 现在的图片可能不是简单的 透明背景的特效图片 画到 黑色背景 上 = 我现在手头的图片 得来的,,,
但是我想从现在的黑色背景图还原到原透明背景图,,,

求答案,,,

[解决办法]
看不太懂你的意思,你参考一下这个例子http://www.relisoft.com/win32/bitmap.html
[解决办法]
你的意思是不是你的特效图是带黑色背景,并且是非0,0,0黑色的一些杂色,你也想去掉?

你知道alpha通道么?你需要给你图指定alpha通道,估计你用的是bmp或者jpg吧,如果不是png,你要自己做一个bmp或者jpg的alpha通道,并通过位运算与原图操作来达到与png相同的效果。

也就是说你要有一张图像的“轮廓图”。
[解决办法]
定义一个CDC的透明用AlphaBlend
[解决办法]
alphablend
[解决办法]
咦?我刚才的回复消失了?

第二种图直接用colorkey就可以了。

第一种的话,闪电效果应该有照亮的特效。所以混合方法要修改。
要使用add混合

不知道你游戏用的什么api,如果是单纯的ddraw的话,要自己写代码做软件混合。
d3d的话,设置固定管线贴图混合方式为D3DTOP_ADD或者用ps。

设rgb值取值0-255(d3d-ps的话就是0-1.0f)
s为魔法贴图数据 d为目标表面数据:
第一种的混合算法如下: 
d.r=max(255,s.r+d.r)
d.g=max(255,s.g+d.g)
d.b=max(255,s.b+d.b)

如果觉得混合出来效果太亮,就把s.rgb衰减下。这个可以载入的时候做,或者找美工直接调贴图


[解决办法]
一样的,效果是什么颜色,混合后就像是被某种颜色的光照亮了
[解决办法]
这样试试看
outimg:合成输出图像
imga:背景图
imgb:前景图
win:平滑窗(9x9,3x3)
weight1:权重1
weight2:权重2
smooth:平滑函操作
outimg = smooth(win,(imga+imgb*weight1)/(weight1 +1)) + imga*weight2

热点排行