有人知道alphablend算法,就是使两副图重叠起来有半透明效果的算法?
有人知道alphablend算法,就是使两副图重叠起来有半透明效果的算法? 问题点数:50、回复次数:13Top
1 楼Larky(睡仙)回复于 2002-04-05 18:18:42 得分 3
难道你把两幅图的颜色值分成RGB三色然后分别乘以一个系数再加起来不可以吗?Top
2 楼pop4444()回复于 2002-04-05 19:09:58 得分 0
关注Top
3 楼nofog(nofog)回复于 2002-04-06 12:55:54 得分 3
larky(睡仙) 说法是正确的
关键是如何分离RGB三色的问题,24bit,32bit色,每个分量占一个字节
16bit,B占5bit G占6bit R占5bitTop
4 楼leo1111111()回复于 2002-04-08 09:21:30 得分 0
这样做的效果不好,我以前看见过一个公式,想问问有没有人知道Top
5 楼linhaibo(美洲豹)回复于 2002-04-08 10:08:06 得分 0
底层的东西还挺有研究意义的哦。。
偶很感兴趣,就是不知所措Top
6 楼magmng(magmng)回复于 2002-04-08 10:29:18 得分 5
如果要简单的说明,去 Free_Mind 那里:www.game1st.com
如果要优化的代码,去 云风 那里:www.codingnow.com
Top
7 楼klaaa(klaaa)回复于 2002-04-08 14:07:24 得分 3
常见Blend方法:
1。新图:Cd*0+Cs*1
2。背景:Cd*1+Cs*0
3。使用最多的Blend:Cd*(1-As)+Cs*AsTop
8 楼leo1111111()回复于 2002-04-08 14:32:07 得分 0
larky(睡仙)和klaaa(klaaa) 的方法我试过的:
但效果不是的,比如背景是灰色,图是白色,合成后的颜色本来应该是灰色,却成了粉红色,图的颜色完全变了。Top
9 楼lpj()回复于 2002-04-08 15:23:22 得分 1
不能在RGB空间做,应该在HSV空间里做,因为RGB空间颜色是不连续的,转换到HSV,色度、饱和度、亮度可以保证颜色是连续的。不会出现灰+白=粉的情况。Top
10 楼shuinu()回复于 2002-04-08 15:38:14 得分 0
《计算机图形学》上有,分别对RGB三个分量进行运算最简单的是(Cs+Cd)/2(游戏里常用这种来加快速度Top
11 楼wisure(Delphi-我决不放手)回复于 2002-04-08 17:13:38 得分 35
Delphi
procedure BmpWaterMark(WaterMark,Source:TBitmap;Left,Top,AlphaValue:Integer;TransColor:TColor=0);
var
x,y:Integer;
R,Rs,Rw,G,Gs,Gw,B,Bs,Bw:Integer;
Wcl,Scl:TColor;
Begin
{ˮӡ}
For x:=0 to WaterMark.Width-1 do
Begin
For y:=0 to WaterMark.Height-1 do
Begin
Wcl:=WaterMark.Canvas.Pixels[x,y];
IF (TransColor<>0)and(Wcl=TransColor) then Continue;
Rw:=GetRValue(ColorToRGB(Wcl));
Gw:=GetGValue(ColorToRGB(Wcl));
Bw:=GetBValue(ColorToRGB(Wcl));
Scl:=Source.Canvas.Pixels[x+Left,y+Top];
Rs:=GetRValue(ColorToRGB(Scl));
Gs:=GetGValue(ColorToRGB(Scl));
Bs:=GetBValue(ColorToRGB(Scl));
R:=((AlphaValue*Rw)+((255-AlphaValue)*Rs))div 256;
G:=((AlphaValue*Gw)+((255-AlphaValue)*Gs))div 256;
B:=((AlphaValue*Bw)+((255-AlphaValue)*Bs))div 256;
Source.Canvas.Pixels[x+Left,y+Top]:=RGB(R,G,B);
End;
End;
End;Top
12 楼leo1111111()回复于 2002-04-09 09:17:18 得分 0
谢谢 wisure(Delphi-我决不放手) 的算法!!Top
13 楼Larky(睡仙)回复于 2002-04-11 16:38:33 得分 0
呵呵越界了当然是变色了Top




