// Alpha = srcAlpha + dstAlpha - srcAlpha * dstAlpha / 0xFF;
// R = (srcR * srcAlpha + dstR * dstAlpha - dstR * dstAlpha * srcAlpha / 0xFF) / Alpha
// G = ...; see also R
// B = ...; see also R
static void alphaBlend(xColor* dst, const xColor* src)
{
// 2 => dst; 3 => src
int a2a3 = dst->a * src->a;
// div = dst->a*0xFF + src->a*0xFF - a2a3;
int div = (dst->a << 8) - dst->a + (src->a << 8) - src->a - a2a3;

int a2r2 = dst->a * dst->r;
int a3r3 = src->a * src->r;
dst->r = ((a2r2 << 8) - a2r2 + (a3r3 << 8) - a3r3 - dst->r * a2a3) / div;

int a2g2 = dst->a * dst->g;
int a3g3 = src->a * src->g;
dst->g = ((a2g2 << 8) - a2g2 + (a3g3 << 8) - a3g3 - dst->g * a2a3) / div;

int a2b2 = dst->a * dst->b;
int a3b3 = src->a * src->b;
dst->b = ((a2b2 << 8) - a2b2 + (a3b3 << 8) - a3b3 - dst->b * a2a3) / div;

dst->a = dst->a + src->a - a2a3 / 0xFF;
}

最新文章

  1. 初学mongodb笔记
  2. static(静态、修饰符)
  3. &lt;s:iterator&gt; 对list操作的一种方法
  4. #define &amp;&amp; const
  5. 常用http请求状态码含义
  6. uva11181Probability|Given
  7. AutoResetEvent类的使用
  8. 一些css书写的小技巧
  9. 安装完ubuntu16.4.0之后要做的一些优化
  10. C#语言中的XmlSerializer类的XmlSerializer.Serialize(Stream,Object)方法举例详解
  11. 洛谷 p1092 虫食算
  12. selenium python2.7安装配置
  13. Java虚拟机JVM简单理解
  14. jquery双击事件会触发单击事件
  15. vue-router,vuex
  16. linq not in
  17. 喵哈哈村的魔法考试 Round #6 (Div.3) 题解
  18. 模拟登陆+数据爬取 (python+selenuim)
  19. Myeclipse安装与破解
  20. listen系统调用

热门文章

  1. Linux学习三:Ubuntu下使用minicom和开发板通信
  2. openwrt编译环境搭建
  3. C#运算符大全_各种运算符号的概述及作用
  4. java学习第17天(TreeSet HashSet)
  5. python 实现 斐波那契数列
  6. 区块 Blocks
  7. 自定义浏览器协议,实现web程序调用本地程序
  8. Hadoop HDFS编程 API入门系列之RPC版本2(九)
  9. 学习计划-----java初级工程师
  10. iOS开发中获取文本的宽高的方式