zoukankan      html  css  js  c++  java
  • 两个RGB的颜色半透明混色算法

    各点像素的RGB值是按一定比例混合而成的,这个比例由Alpha值决定,具体算式见下:    
       
        Alpha   =   0   ~   100  
        R   =   (   R1   *   (100   -   Alpha)   +   R2   *   Alpha   )   /   100  
        G   =   (   G1   *   (100   -   Alpha)   +   G2   *   Alpha   )   /   100  
        B   =   (   B1   *   (100   -   Alpha)   +   B2   *   Alpha   )   /   100  
       
        示例:  
        RGB1   (   232,   54,   13   )  
        RGB2   (   94,   186,   233   )  
       
        Alpha   =   30  
        R   =   (   232   *   70   +   94   *   30   )   /   100   =   190.6   ->   190  
        G   =   (   54   *   70   +   186   *   30   )   /   100   =   93.6   ->   93  
        B   =   (   13   *   70   +   233   *   30   )   /   100   =   79  
        Alpha   =   50  
        R   =   (   232   *   50   +   94   *   50   )   /   100   =   163  
        G   =   (   54   *   50   +   186   *   50   )   /   100   =   120  
        B   =   (   13   *   50   +   233   *   50   )   /   100   =   123  
       
      这样在Java中可以对以上计算方法封装成函数或类,以方便代码复用,对应的Java代码如下:

    1. protected Color calculateAlphaValue(Color c1, Color c2, int alpha)
    2. {
    3.   if (alpha < MIN_ALPHA)
    4.   alpha = MIN_ALPHA;
    5.   else if (alpha > MAX_ALPHA)
    6.   alpha = MAX_ALPHA;
    7.  
    8.   int R = (c1.getRed() * (MAX_ALPHA - alpha) + c2.getRed() * alpha) / MAX_ALPHA;
    9.   int G = (c1.getGreen() * (MAX_ALPHA - alpha) + c2.getGreen() * alpha) / MAX_ALPHA;
    10.   int B = (c1.getBlue() * (MAX_ALPHA - alpha) + c2.getBlue() * alpha) / MAX_ALPHA;
    11.  
    12.   return new Color(R, G, B);
    13. }

     
    32位色下的颜色混合  
       
      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  
       
       
       
      R1、G1、B1、Alpha1指上层的颜色值  
      R2、G2、B2、Alpha2指下层的颜色值  
      R、G、B、Alpha指合并后的颜色

         
         
         
  • 相关阅读:
    IT人士必去的10个网站
    c++怎样让函数返回数组
    vs中“Stack around the variable was corrupted”的解决方案
    c++ eof()函数
    bat开发小工具以及使用
    Python接口自动化(一)---json数据类型取值
    MAVEN编译错误解决:maven only whitespace content allowed before start
    shell常用命令总结总结
    shell打包和解压
    java总结笔记
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/1852858.html
Copyright © 2011-2022 走看看