8

我想改变图像某些部分的亮度。我知道如何使用 ColorMatrix 来改变图像的亮度(或色调)。但它将应用于整个图像。

我有一个蒙版文件(黑白图像)。我只想在该蒙版的白色部分应用亮度变化如何在 Android 中执行此操作?

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

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

11

对于给定的位图和掩码:

位图.png

面具.png

首先创建一个临时位图:

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();
}

结果是:

在此处输入图像描述

于 2013-04-23T05:26:00.573 回答
1

你可以改变

float[] src = {
0, 0, 0, 0, 255,
0, 0, 0, 0, 255,
0, 0, 0, 0, 255,
1, 1, 1, -1, 0,
};

float[] src = {
0, 0, 0, 0, 255,
0, 0, 0, 0, 255,
0, 0, 0, 0, 255,
1, 1, 1, 0, 0,
};

在灰色部分提供更多的半透明度。

于 2014-08-14T04:01:20.630 回答