Android/Dynamic masking image

안드로이드 동적 알파 마스킹 이미지 적용 예제

Soul-Learner 2012. 5. 24. 01:37

동적으로 알파 마스킹 비트맵을 생성하고 적용하는 예

소스코드 

alpha_dyna_mask.zip

사용된 이미지 파일은 이곳을 참조

배경 이미지 위에 알파 마스킹 비트맵을 동적으로 생성하여 그릴 때 PorterDuff 모드를 DST_OUT으로 설정하면 다음과 같이 이미지의 일부 영역이 투명하게 되어 배경이 보이게 된다.

SurfaceView.onDraw() 의 내용

@Override

protected void onDraw(Canvas canvas) {

canvas.drawColor(Color.CYAN);

Canvas c = new Canvas();

        Bitmap mainImage = BitmapFactory.decodeResource(getResources(),R.drawable.mountain);

        //Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.alpha_mask);

        Bitmap result = Bitmap.createBitmap(mainImage .getWidth(), mainImage .getHeight(), Bitmap.Config.ARGB_8888);

        

        // 동적으로 마스킹 이미지를 생성하고 그리는 예

        Bitmap mask = Bitmap.createBitmap(mainImage .getWidth(), mainImage .getHeight(), Bitmap.Config.ARGB_8888);

        Canvas canvasForMask = new Canvas(mask);

        Paint paint1 = new Paint();

        paint1.setAntiAlias(true);

        paint1.setARGB(255, 255, 255, 255);

        canvasForMask.drawCircle(100, 100, 40, paint1);//흰색으로 그려주는 곳은 투명하게 되어 배경이 보이게 될 영역이다

        

        c.setBitmap(result);


        c.drawBitmap(mainImage, 0, 0, null);

        

        Paint paint2 = new Paint();

        paint2.setFilterBitmap(false);

        paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT) );


        c.drawBitmap(mask, 0, 0, paint2);

        

        paint2.setXfermode(null);

        canvas.drawBitmap(result, 0, 0, null);

}