java - Android Image Masking 未按预期呈现

标签 java android image bitmap masking

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

我的图片: 我为创建 mask 效果而创建的一些图像: enter image description here enter image description here

但是使用这个逻辑的结果图像看起来像这样,

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 图像

我已经在 Samsung S3 OS 4.2 上测试过


更新: 我用我自己的 JPEG 尝试了博客文章中的蒙版图像。它工作得很好,所以问题缩小到蒙版图像。它需要某种配置。如果有人以前遇到过这个问题或者我遗漏了什么,请告诉我。


最新更新:

我终于明白了。造成差异的是蒙版图像内的 alpha channel 。如果你是一个没有 UI 设计师的程序员,那么你必须照顾好这个 alpha channel

最佳答案

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

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

mask.recycle();

我还没有测试过它,但我认为它值得一试。这应该有效,因为当你回收掩码时,掩码图像本身被 GC 处理了。因此,如果您不调用它,它应该可以工作。

关于java - Android Image Masking 未按预期呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152830/

相关文章:

java - 在 Java 中创建管道式 SQL/NOSQL 查询

android - 解析 Activity 未显示

Android ListActivity - 在空列表和非空列表之间切换

javascript - 如何检测图像何时完成在浏览器中的渲染(即绘制)?

html - 显示两种尺寸的图片

java - 在不同的服务器上运行 Web 应用程序和核心逻辑

java - 意外的顶级异常 - 多个库项目

来自字节[]的JAVA : How to create . PNG图像?

java - gRPC protobuffers Java 无法为 BlockingStub 设置 CallOptions

android - DiffUtil 没有更新 recyclerview