首页 > 编程语言 >RGBA alpha 透明度混合算法

RGBA alpha 透明度混合算法

时间:2023-08-15 14:24:54浏览次数:28  
标签:Alpha1 32 Alpha 算法 RGBA ALPHA alpha

       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;

标签:Alpha1,32,Alpha,算法,RGBA,ALPHA,alpha
From: https://www.cnblogs.com/kn-zheng/p/17631172.html

相关文章

  • 贪心算法入门
    贪心算法的核心思想是通过局部最优解得到或近似取得全局最优解,此时有几个待解决的问题:怎么判断题目是否应用贪心策略求解?怎么寻求局部最优与全局最优的关系?如何选择最优的贪心标准以得到全局最优/较优解?思想理解可以参阅知乎答主"冒泡"的一篇回答如何理解动态规划?......
  • 使用FFmpeg进行yuv420转rgba
    讲解一下将获取到视频数据,进行rgb转码,并且进行相应的缩放操作//存放解码过后的数据unsignedchar*decode_data;intdecode_size=0;/***解码AVFrame中的yuv420数据并且转换为rgba数据**@paramframe需要解码的帧结构*@paramsrc_width需要转换的帧宽度*......
  • esXGray开发笔记:基于直线检测的文本倾斜自动校正算法实现(python+opencv)
    昨日采用最小面积矩形的方式实现文本倾斜自动校正,但后面的角度有点麻烦,于是改用基本直线检测的算法。算法简介:检测直线,自动调节参数,至少获取11条直线(直线条数调节)计算每条直线与x轴夹角从返回的角度中找到出现次数较多的直线角度平均值并返回作为图片倾斜角度检测到角度后,就......
  • 栈(Stack)的基本原理及算法实现
    栈(Stack)的基本原理及算法实现一、栈的基本概念栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的线性表,其特点是只允许在一端进行插入操作,而在另一端进行删除操作。栈的基本操作有:入栈(push)、出栈(pop)、查看栈顶元素(top)等。二、栈的实现原理数组实现:使用一组连续的内存空间来存储......
  • 有向图的Tarjian算法
    强连通分量对于一张有向图,对于图中任意两个节点\(x,y\),\(x\)能到\(y\),\(y\)也能到\(x\),则称其为强连通图。有向图的极大联通子图被称为强连通分量,简记为SCC(StronglyConnectedComponent)。有时候,我们需要将一张有向图分成几个强连通分量,这时候可以基于Tarjian设计一个算法。T......
  • 算法镇魂三部曲!
    一只小狐狸带你解锁炼丹术&NLP秘籍震惊!乐坛新人夕小瑶的卖萌屋今日重磅发布三张原创专辑!!????点击试听????点击试听????点击试听虽然卖萌屋常常被大家戏称为“仙女屋”、“神仙屋”、“宝藏屋”等,但卖萌屋更希望自己能成为一个有温度的创作小屋  小屋的每一位创作者,都跟小夕一样喜......
  • 2023-08-14:用go语言写算法。给出两个长度相同的字符串 str1 和 str2 请你帮忙判断字符
    2023-08-14:用go语言写算法。给出两个长度相同的字符串str1和str2,请你帮忙判断字符串str1能不能在零次或多次转化后变成字符串str2,每一次转化时,你可以将str1中出现的所有相同字母变成其他任何小写英文字母,只有在字符串str1能够通过上述方式顺利转化为字符串......
  • 2023-08-14:用go语言写算法。给出两个长度相同的字符串 str1 和 str2 请你帮忙判断字符
    2023-08-14:用go语言写算法。给出两个长度相同的字符串str1和str2,请你帮忙判断字符串str1能不能在零次或多次转化后变成字符串str2,每一次转化时,你可以将str1中出现的所有相同字母变成其他任何小写英文字母,只有在字符串str1能够通过上述方式顺利转化为字符串str2......
  • 敏感词过滤算法实现(前缀树)
    前缀树前缀树是N叉树的一种特殊形式,也叫Trie、字典树、查找树。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及通往该子节......
  • 类欧几里得算法
    类欧几里得算法定义\[\displaystyle\begin{aligned}f(a,b,c,n)&=\sum\limits_{i=0}^{n}\left\lfloor\dfrac{ai+b}{c}\right\rfloor\\g(a,b,c,n)&=\sum\limits_{i=0}^{n}{\left\lfloor\dfrac{ai+b}{c}\right\rfloor}^2\\h(a,b,c,n)&......