CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

有人知道alphablend算法,就是使两副图重叠起来有半透明效果的算法?

楼主leo1111111()2002-04-05 15:23:26 在 专题开发/技术/项目 / 数据结构与算法 提问

有人知道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

相关问题

  • 绘图的半透明算法是怎样的?
  • 请教有关两个RGB的颜色半透明混色算法?
  • 在已知颜色R1、G1、B1上面蒙上半透明的R2、G2、B2颜色的算法是什么?
  • form 半透明
  • 偶做了个自绘菜单,用到了AlphaBlend,但是只有菜单第一项是半透明的,何故?
  • 除了使用AlphaBlend外,还有什么方法可以实现半透明效果的画图?
  • Excel中,选中的单元格会呈蓝色半透明状态,我用AlphaBlend作同样处理,却很慢。
  • 半透明窗体?
  • 半透明窗体.
  • 关于半透明

关键词

  • 算法
  • 效果
  • source
  • top
  • alphavalue
  • colortorgb
  • wcl
  • scl
  • watermark
  • transcolor

得分解答快速导航

  • 帖主:leo1111111
  • Larky
  • nofog
  • magmng
  • klaaa
  • lpj
  • wisure

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo