2013-04-22 5 views
7

Chcę zmienić jasność w określonej części obrazu. Wiem, jak używać ColorMatrix do zmiany jasności (lub odcienia) obrazu. Ale zostanie zastosowany do całego obrazu.Android stosuje colorMatrix colorFilter na części obrazuView z maską

Mam plik maski (obraz czarno-biały). Chcę zastosować zmianę jasności tylko na białej części tej maski. Jak to zrobić w Androidzie?

Poniżej znajduje się obraz maski i wynik, który chcę uzyskać.

enter image description here enter image description here

Odpowiedz

11

dla danej bitmapy i maski:

bitmap.png

mask.png

najpierw utworzyć tymczasowy bitmapę:

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

i wyciągnąć go (I skalowane go, ponieważ mój emulator skalowane w dół):

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

a wynik jest:

enter image description here

1

można zmienić

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

do

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

, aby uzyskać więcej półprzezroczystości w szarej części.

Powiązane problemy