PorterDuffXfermode DST_IN忽略alpha

时间:2016-11-21 16:37:38

标签: android graphics bitmap

我正在尝试使用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)。有任何想法。这可能是由什么造成的?

0 个答案:

没有答案