Android Image Masking无法按预期呈现

时间:2014-06-11 00:15:45

标签: java android image bitmap masking

我正在使用此blog post来生成屏蔽效果。我可能会遗漏一些东西,但我无法实现预期的行为。我是图像处理的新手。基于我的互联网研究,我假设我必须有原始图像的JPEG图像和具有相同尺寸的蒙版图像的PNG格式。我甚至试图创建如下图像

我的图片: 我创建的一些图像用于创建遮罩效果: enter image description here enter image description here

但使用此逻辑的结果Image看起来像这样,

enter image description here

为什么?我在这里错过了一些东西吗?到目前为止唯一工作的图像是该链接上的示例中的图像。

我的屏蔽代码:

 public static Bitmap getMaskedBitmap(Resources res, int sourceResId, int maskResId) {

    BitmapFactory.Options options = new BitmapFactory.Options();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            options.inMutable = true;
    }
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap source = BitmapFactory.decodeResource(res, sourceResId, options);
    Bitmap bitmap;
    if (source.isMutable()) {
        bitmap = source;
    } else {
      bitmap = source.copy(Bitmap.Config.ARGB_8888, true);
      source.recycle();
   }

  bitmap.setHasAlpha(true);
  Canvas canvas = new Canvas(bitmap);
  Bitmap mask = BitmapFactory.decodeResource(res, maskResId);
  Paint paint = new Paint();
  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
  canvas.drawBitmap(mask, 0, 0, paint);
  mask.recycle();
  return bitmap;

}

  1. 请告诉我哪里出错了?
  2. 图像有什么要求吗?特别是Mask Image
  3. 我已在三星S3 OS 4.2上测试过


    更新: 我尝试使用我自己的JPEG。来自博客文章的屏幕图像.IT工作完美,所以问题缩小到屏蔽图像。它期望某种配置。如果有人知道以前遇到过这种情况,或者我错过了一些东西,请告诉我。


    最新更新:

    我终于想通了。它是掩模图像中的alpha通道产生差异。如果您是没有UI设计师的程序员,那么您必须处理这个alpha通道

2 个答案:

答案 0 :(得分:0)

参考此SO回答Android: Bitmap recycle() how does it work?

这段特殊代码可能就是问题所在。我可以说你可能不应该打电话给

mask.recycle();

我还没有对它进行过测试,但我觉得它值得一试。这应该有效,因为当你回收蒙版时,蒙面图像本身就是GCed。所以,如果你不打电话,它应该有效。

答案 1 :(得分:0)

我终于想通了,掩码图像必须有一个alpha通道。在Photoshop上,您必须添加透明层才能设置启用Alpha通道。