본문 바로가기

Android/Alpha Masking

안드로이드 알파 마스크 예제

전경 이미지의 특정 영역을 투명하게 설정하여 뒤에 있는 배경 이미지가 보이도록 동적으로 설정하는 예

사용된 배경 이미지(background.jpg)                               사용된 전경 이미지(wall.png)

     


예제 실행 결과 전경 이미지의 특정 부분에 Alpha Mask 가 설정/투명하게 처리되어 배경 이미지가 보이게 된다.


SurfaceView.onDraw() 의 내용 및 소스코드  

dyna_alpha_mask.zip                                        

@Override

protected void onDraw(Canvas canvas) {


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

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

        Bitmap mask = null;

        // 전경 이미지와 동일 크기의 mutable 이미지 생성, 전경 이미지의 바탕으로 사용됨

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

        

        canvas.drawBitmap(background, 0, 0, null); // 전체화면의 배경을 그림

        

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

        // 전경 이미지와 동일한 크기의 알파 마스크 이미지를 생성하고 흰색을 채워 투명영역 설정함

        mask = Bitmap.createBitmap(wall .getWidth(), wall .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(200, 0, 40, paint1);//흰색으로 그려주는 곳은 투명하게 되어 배경이 보이게 될 영역이다

        

        Canvas c = new Canvas(result);

        //c.setBitmap(result);

        c.drawBitmap(wall, 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, 84, null); // 배경 위에 완성된 전경 이미지를 그림

}