2013-04-22 53 views
7

我想要更改图像的某个部分的亮度。我知道如何使用ColorMatrix来改变图像的亮度(或色调)。但它将应用于整个图像。Android在imageView的一部分上应用colorMatrix colorFilter与蒙版

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

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

enter image description here enter image description here

回答

11

对于给定的位图和掩模:

bitmap.png

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

,其结果是:

enter image description here

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, 
}; 

给灰色部分更多的半透明。