【问题标题】:PorterDuff.Mode.Multiply not working as intended? Black background instead of transparentPorterDuff.Mode.Multiply 没有按预期工作?黑色背景而不是透明
【发布时间】:2012-09-10 11:11:14
【问题描述】:

我对 PorterDuff.Mode.Multiply 有疑问,似乎所有 Alpha 通道都设置为“黑色”。这是预期的吗?在 Photoshop / gimp 等中,效果将透明度留在应有的位置。 Darken 只保留透明度,但仍将效果应用于具有 RGB 的值,这就是我想要的,但具有乘法的效果。

只是 PorterDuff.Mode.Multiply 会导致叠加层出现黑色背景问题。

Bitmap photo = ((BitmapDrawable)ivPhoto.Drawable).Bitmap;
Bitmap overlay = ((BitmapDrawable)overlay.Drawable).Bitmap;

Point ss = getScaledSize(photo.Width, photo.Height, scrSize.X, scrSize.Y);

Bitmap bresult = Bitmap.CreateScaledBitmap(photo, ss.X, ss.Y, true);

Canvas myCanvas = new Canvas(bresult);

Paint myPaintStyle = new Paint(PaintFlags.FilterBitmap);

myPaintStyle.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.Multiply));

myCanvas.DrawBitmap(
    overlay,  //img
    ivHair.GetX(), ivHair.GetY(),  //x,y
    myPaintStyle); //style


return bresult;

帮助? :)

这是用于 Android 的 Mono

编辑:DstIn 具有相同的不良影响。 (阿尔法是黑色的)

【问题讨论】:

  • 我几乎可以得到我想要的效果,但前提是我应用颜色(我想这可能是可取的)myPaintStyle.SetColorFilter(new PorterDuffColorFilter(Color.DarkOrange, PorterDuff.Mode.Multiply)); 而不是myPaintStyle.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.Multiply));
  • 请注意 - 使用上述方法应用颜色时,通常只能使用高亮度颜色以获得所需的混合效果。

标签: c# android xamarin.android alpha porter-duff


【解决方案1】:

我一整天都遇到同样的问题。我快疯了。

对我有用的是这行代码:

yourView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

将它放在类构造函数中,现在黑色背景应该消失了。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 2013-09-21
    • 2012-04-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多