android管道使用方法,Skia-Android的(2D)Canvas绘图管道各部分如何配合在一起?

我想更好地了解Android(2D)Canvas绘图管道的组件如何组合在一起。

例如,XferMode,Shader,MaskFilter和ColorFilter如何交互? 这些类的参考文档相当稀疏,而Canvas和Paint的文档并没有真正添加任何有用的解释。

对我来说,还不是很清楚,具有固有颜色的绘图操作(例如:drawBitmap,还是诸如SkPaint之类的“矢量”基元)如何适用于所有这些颜色?它们是否总是忽略Paint的颜色并改用其固有颜色?

一个人可以做这样的事情我也感到惊讶:

Paint eraser = new Paint();

eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

canvas.drawOval(rectF, eraser);

这将消除椭圆形。 在我注意到这一点之前,我的思维模式是在画布上(概念上)绘制一个单独的“图层”,然后使用“ Paint”的传输模式将该图层与画布的位图组成。 如果就这么简单,那么上述代码将擦除整个Bitmap(在剪切区域内),因为CLEAR始终将颜色(和alpha)设置为0,而不管源的alpha如何。 因此,这意味着要进行另一种遮罩,以将擦除限制为椭圆形。

我确实找到了API演示,但是每个演示都是“在真空中”进行的,并且没有显示其关注的事物(例如XferModes)如何与其他事物(例如ColorFilters)交互。

通过足够的时间和精力,我可以凭经验找出这些部分之间的关系或破译来源,但我希望其他人已经解决了这个问题,或者更好的是,有一些关于管道/绘图模型的实际文档可以 我错过了。

这个问题的灵感来自看到另一个SO问题的答案中的代码。

更新

在寻找一些文档的过程中,我想到,由于我在这里感兴趣的很多东西似乎只是斯基亚(skia)上的一个很薄的贴面,所以也许会有一些斯基亚文档可能会有所帮助。 我能找到的最好的东西是SkPaint的文档,其中说:

有6种效果可以   被分配给油漆:

SkPathEffect-在生成几何图形(路径)之前修改几何图形(路径)   字母遮罩(例如破折号)

SkRasterizer-组成自定义蒙版图层(例如阴影)

SkMaskFilter-对Alpha蒙版进行着色和修改之前的修改   绘制(例如模糊,浮雕)

SkShader-例如 渐变(线性,径向,扫掠),位图图案   (夹,重复,镜像)

SkColorFilter-在应用xfermode之前修改源颜色   (例如颜色矩阵)

SkXfermode-例如 波特-达夫传递模式,混合模式

它没有明确说明,但我猜这里的效果顺序是它们在管道中出现的顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值