【问题标题】:Android Image Masking not rendering as intendedAndroid Image Masking 未按预期呈现
【发布时间】:2014-07-31 21:57:21
【问题描述】:

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

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

但使用此逻辑生成的图像看起来像这样,

.

为什么会这样?我在这里错过了什么吗?到目前为止,唯一有效的图像是该链接示例中的图像。

我的屏蔽码:

 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. 对图片有什么要求吗?尤其是蒙版图片

我已经在三星 S3 OS 4.2 上测试过


更新日期: 我用我自己的 JPEG 尝试了博客文章中的掩码图像。它非常完美,因此问题被缩小到掩码图像。它需要某种配置。如果有人知道之前遇到过这个问题,或者我错过了什么,请告诉我。


最新更新日期:

我终于想通了。是遮罩图像中的 alpha 通道造成了差异。如果你是一个没有 UI 设计师的程序员,那么你必须处理好这个 alpha 通道

【问题讨论】:

  • 可以请人改变状态吗?
  • 你的问题听起来很有趣,但缺少你迄今为止尝试过的东西。添加一些代码,我将尝试投票重新打开这个问题。如果您不发布某些内容,我们将无法找出您哪里出错了。想知道为什么它被搁置为题外话。
  • 我从博客中引用了代码,在这里也添加了代码
  • 通常非站点链接在 SO 中是不受欢迎的。如果链接失效,问题就会过时。无论如何,我会投票重新开放。

标签: java android image bitmap masking


【解决方案1】:

参考这个 SO 答案Android: Bitmap recycle() how does it work?

这行代码很可能是问题所在。我可以说你可能不应该打电话

mask.recycle();

我尚未对其进行测试,但我认为它值得一试。这应该可以工作,因为当您回收蒙版时,蒙版图像本身是 GCed。因此,如果您不调用它,它应该可以工作。

【讨论】:

  • 我试过没有它。它不工作。我发现掩蔽图像需要具有 alpha 掩蔽。仍然不确定它是否有效?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2018-10-01
    • 2014-09-29
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多