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