2011-12-22 6 views
0

onDraw 메서드에서 사용자 정의보기를 만들 필요가 있습니다. 마스크를 사용하여 비트 맵을 그릴 필요가 있습니다. 나는 페인트를 만들었습니다.안드로이드 마스크 비트 맵

Paint maskPaint = new Paint(); 
    maskPaint.setAntiAlias(true); 
    maskPaint.setXfermode(new AvoidXfermode(Color.RED, 0, AvoidXfermode.Mode.TARGET)); 

그리고이 페인트를 사용하여 캔버스에 비트 맵을 그립니다. 내 문제는 모서리에서 내 마스크가 255 미만의 알파가있는 픽셀이있는 것입니다. 마스크 이미지가 마스크보다 0보다 큰 픽셀에 마스크 이미지와 동일한 알파로 마스크에 비트 맵 픽셀을 그리는 방법이 있습니까?

+0

당신은 내성을 증가시키기 위해 시도 할 수? – Jave

+0

마스크를 사용하지 않고 색상이 동일합니다. 모서리 부분에서 알파가 다르지만 색상은 동일합니다. –

+0

흠, 예상치 못한 부분입니다. 일반적으로 알파의 변화는 다른 채널의 변화와 동일하다고 가정합니다. – Jave

답변

0
Resources resources = this.getResources(); 
Bitmap mask = BitmapFactory.decodeResource(resources,R.drawable.fx_lightleak2_small); 
int width=bMap.getWidth(); 
int height=bMap.getHeight(); 
Bitmap resizedbitmap=Bitmap.createScaledBitmap(mask, width, height, true); 

Bitmap result = Bitmap.createBitmap(bMap.getWidth(), bMap.getHeight(), Config.ARGB_8888); 
Canvas c = new Canvas(result); 
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
paint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN)); 
c.drawBitmap(bMap, 0, 0, null); 
paint.setAlpha(200); 
c.drawBitmap(resizedbitmap, 0, 0, paint); 
paint.setXfermode(null); 
effect_5.setImageBitmap(result); 
2
private Bitmap maskingImage(Bitmap s, int drawable) { 
     Bitmap original = s; 
     Bitmap mask = BitmapFactory.decodeResource(getResources(),drawable); 
     Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(),Bitmap.Config.ARGB_8888); 
     Canvas mCanvas = new Canvas(result); 
     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
     mCanvas.drawBitmap(original, 0, 0, null); 
     mCanvas.drawBitmap(mask, 0, 0, paint); 
     paint.setXfermode(null); 
     return result; 
    }