当前位置: 首页 > 知识库问答 >
问题:

Android将colorMatrix colorFilter应用于imageView的一部分,并带有掩码

戚建华
2023-03-14

我有一个面具文件(黑白图像)。我只想将亮度变化应用在那个面具的白色部分。在Android中如何做到这一点?

下面是一个蒙版图像和我想要得到的结果。

共有1个答案

宿衡虑
2023-03-14

对于给定的位图和掩码:

首先创建一个临时位图:

bitmap = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.bitmap);
mask = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.mask);

float[] src = {
    0, 0, 0, 0, 255,
    0, 0, 0, 0, 255,
    0, 0, 0, 0, 255,
    1, 1, 1, -1, 0,
};
ColorMatrix cm = new ColorMatrix(src);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(cm);
maskPaint = new Paint();
maskPaint.setColorFilter(filter);
maskPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

filteredBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas c = new Canvas(filteredBitmap);
c.drawBitmap(bitmap, 0, 0, null);
c.drawBitmap(mask, 0, 0, maskPaint);

colorFilterPaint = new Paint();
colorFilterPaint.setColorFilter(new LightingColorFilter(0xffffff, 0x880000));

并绘制它(由于我的模拟器缩放了它,所以我缩放了它):

@Override
public void draw(Canvas canvas) {
    canvas.save();
    canvas.scale(3, 3);
    canvas.drawBitmap(bitmap, 0, 0, null);
    canvas.drawBitmap(filteredBitmap, 0, 0, colorFilterPaint);
    canvas.restore();
}
 类似资料:
  • 我有一个,android: src设置为,即一个白色圆圈。我想要的是在运行时响应一些事件来着色这个。似乎是解决方案,但使用后(尝试了不同的参数)图像变得不可见(我在屏幕上看不到它)。 这个怎么解决?还有没有更好的办法有色圈?

  • 我有一个框架,第一个元素是一个ImageView,它的高度和宽度与父级匹配,让id为a。第二个元素也是一个ImageView,它的高度和宽度与父级匹配,让id为B。第三个元素是一个视图,它的高度和宽度都是100 dp,可以移动到整个屏幕上,让id为C。我在背景C中使用透明色,所以在C中我们应该看到B,因为B在a上面。但我想在C中显示a,我怎么做?

  • 我正在寻找帮助开发(或一个库),可以让我合并在一起的多个图像到一个ImageView。 我的应用程序将用户之间的交互组合在一起,而不是单独地显示它们,因此我希望合并它们的所有化身,这样一个适配器单元格就可视化了一个“组”。 Facebook.com的聊天就是一个很好的例子: 我的问题是,我如何在Android/Java中提供这个功能?据推测,它的图像数量可能介于1到4之间。请告诉我您能给出的任何建

  • 本文向大家介绍Android手势ImageView三部曲 第一部,包括了Android手势ImageView三部曲 第一部的使用技巧和注意事项,需要的朋友参考一下 这几天一直在研究github上的PhotoView跟GestureImageView,发现写的都很牛,看了很久的代码,于是打算把自己所看的一些东西总结一下,内容还是很多的,但是很有含金量哈~~ 先附上两个开源项目的链接: Gesture

  • 问题内容: 我想将带有参数的函数应用于python pandas中的系列: 问题答案: 位置参数添加到系列元素之后。 对于旧版本的pandas: 文档对此进行了清楚的说明。apply方法接受应具有单个参数的python函数。如果要传递更多参数,则应按照在其评论中的建议使用。 一个例子: 你也可以使用传递关键字参数。 另一种方法是创建一个lambda: 但我认为使用partial会更好。

  • 我想创建一个从ArrayList中获取数据的listview。这是单行的一个示例 默认情况下,该复选框是禁用的,它只在一个SeloncemClickListener中激活(用于多次删除)。 最后一个图像是一个菜单按钮,它打开菜单列表以进行删除、共享等操作。 我不知道如何制作我的定制适配器。使用simplearrayadapter很简单,但我不能使用自定义行。有人帮忙吗?吻,塔季扬娜。对不起我的英语