我正在尝试使用BitmapShader
类似于使用PorterDuffXfermode
(使用alpha掩码在另一个位图的顶部绘制位图)。我一直在使用的代码是:
drawBitmapWithMaskFromAlpha(Canvas dstCanvas, Bitmap srcBitmap, Bitmap mask) {
// Draw the fully opaque source in the canvas
dstCanvas.drawBitmap(srcBitmap, 0, 0, null);
// Draw the mask with xfermode on top, updating the destination
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
dstCanvas.drawBitmap(mask, 0, 0, paint);
}
掩码是一个ARG_8888位图,其位具有可变的alpha和固定的白色(例如0x23ffffff,0xa3ffffff),并且所有处理都在内存位图上完成,而不是在屏幕上(它在Fresco内部{{ 1}})。最后,我希望在PostProcessor
中绘制srcBitmap
,并根据掩码中的alpha值更新其alpha值。
上面的代码似乎在最新版本的Android上运行良好,但在SDK 16上似乎完全忽略了alpha值。当打印像素值时,似乎颜色部分得到更新,而alpha保持为0xFF)。有任何想法。这可能是由什么造成的?