博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RGBA alpha 透明度混合算法
阅读量:6620 次
发布时间:2019-06-25

本文共 1279 字,大约阅读时间需要 4 分钟。

  hot3.png

Alpha 透明度混合算法,在网上查找了一下,主要有以下三种:

一、 R1,G1,B1,Alpha1 为前景颜色值,R2,G2,B2,Alpha2 为背景颜色值,则

        前景色  R = R1 * Alpha1 + R2 * Alpha2 * (1-Alpha1) ;

                   G = G1 * Alpha1 + G2 * Alpha2 * (1-Alpha1) ;

                   B = B1 * Alpha1 + B2 * Alpha2 * (1-Alpha1) ;

        背景色 Alpha = 1 - (1 - Alpha1) * ( 1 - Alpha2) ;

                   R = R / Alpha ;

                   G = G / Alpha ;

                   B = B / Alpha ;

二、半透明算法:

      混合算法目前在常用到的算法是AlphaBlend。
      计算公式如下:假设一幅图象是A,另一幅透明的图象是B,那么透过B去看A,看上去的图象C就是B和A的混合图象,
      设B图象的透明度为alpha(取值为0-1,1为完全透明,0为完全不透明).
      Alpha混合公式如下:
                  R(C)=(1-alpha)*R(B) + alpha*R(A)
                  G(C)=(1-alpha)*G(B) + alpha*G(A)
                  B(C)=(1-alpha)*B(B) + alpha*B(A)
      R(x)、G(x)、B(x)分别指颜色x的RGB分量原色值。从上面的公式可以知道,Alpha其实是一个决定混合透明度的数值。
      改变这个 alpha 值可以得到一个渐变的效果。

      分离RGB色用"位与"、"移位"运算的方法;

      透明的比例按2的N次幂来分级,这样可以快速运算。

      如果是按32级
      Alpha = 1/32
      B图的权重 = (32-n)/32,则A图的权重= n/32,

      可以得到这样的算法:

      R(C)= (32-n) * R(B)+ n* R(A);

     再对R(C)右移5位(除以32)就可以了
 
    透明的处理:
       假设指定B上的黑色透明色,则碰到B上的颜色为黑色,则不显示黑色,改为显示A上这个位置的颜色。

 

三、简易Alpha混合算法:首先,要能取得上层与下层颜色的 RGB三基色,

      然后用r,g,b 为最后取得的颜色值;r1,g1,b1是上层的颜色值;r2,g2,b2是下层颜色值

      若Alpha=透明度,则

      当Alpha=50%时,

                    r = r1/2 + r2/2;

                    g = g1/2 + g2/2;

                    b = b1/2 + b2/2;

      当Alpha<50%时,

                    r = r1 - r1/ALPHA + r2/ALPHA;

                    g = g1 - g1/ALPHA + g2/ALPHA;

                    b = b1 - b1/ALPHA + b2/ALPHA;

      当Alpha>50%时,

                    r = r1/ALPHA + r2 - r2/ALPHA;

                    g = g1/ALPHA + g2 - g2/ALPHA;

                    b = b1/ALPHA + b2 - b2/ALPHA;

转载于:https://my.oschina.net/rouway/blog/180400

你可能感兴趣的文章
EVCache —— Netflix 的分布式内存数据存储
查看>>
springboot docker笔记
查看>>
服务化改造实践 | 如何在 Dubbo 中支持 REST
查看>>
【第8章】JVM内存管理
查看>>
ovirt官方安装文档 附录G
查看>>
磁盘故障小案例
查看>>
HTML
查看>>
我的友情链接
查看>>
POJ 3335 Rotating Scoreboard 半平面交
查看>>
域名和网址链接被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
查看>>
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(二)
查看>>
ubuntu下安装jdk
查看>>
python操作数据库-安装
查看>>
你真的了解interface和内部类么
查看>>
kuangbin专题七 POJ3264 Balanced Lineup (线段树最大最小)
查看>>
JS动画效果链接汇总
查看>>
陈云川的OPENLDAP系列
查看>>
P1197 [JSOI2008]星球大战
查看>>
XML转义字符
查看>>
mysql设置字符集CHARACTER SET
查看>>