Alpha合成问题

时间:2010-11-14 20:47:53

标签: android graphics

说我想创建一个看起来像这样的自定义控件:

http://karmalita.com/stuff/alpha1.png

弹出气球的宽度可以改变,“指针三角形”的相对位置也可以改变。当然,还会在顶部绘制其他图形/文字。

我希望它基于图像,而不是尝试做整个事物矢量。当然,图像具有不同的半透明度,这是出现复杂情况的地方。

我知道有很多方法可以做到这一点(目前我使用了四个图像,其中一个被复制了很多次......虽然有效但很麻烦),但我有兴趣找到最简单,最干净的办法。如果我可以在主矩形(左下方)使用九个补丁,然后在其顶部绘制指针三角形(右下方),那将会是一件好事。

http://karmalita.com/stuff/alpha2.png

但当然这不起作用,因为矩形的下边缘会渗透指针三角形,阴影会累积,等等。

我能做些什么波特 - 达芙魔法吗?

或者我应该使用反向剪辑矩形掩盖指针的区域,然后绘制九个补丁(适当拉伸),所以看起来像这样....

http://karmalita.com/stuff/alpha3.png

....然后删除剪辑rect,然后在剪辑rect所在的区域绘制指针三角形?

或者是什么?是否有更简单/更好/更有效的方式?

虽然我喜欢这个特定问题的解决方案,但我最感兴趣的是针对这些场景的一般解决方案。

1 个答案:

答案 0 :(得分:0)

有趣的人......

我正要说“不,除了反向剪辑直接解决方案之外没有办法”,但我有一个(未经测试的)想法:

当您将箭头部分添加到常规9补丁气球时,结果(幸运的是)所有像素变得更加不透明。

因此(这里是未经测试的位)您应该能够预先计算“箭头”补丁的修改版本 - 当应用于常规气球顶部时,会产生正确的效果:例如,生成的箭头补丁在常规补丁已经有贡献的情况下,阴影会减少。

我会让你考虑数学,但我想这很简单。