본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] 일반적이지 않은 사진(이미지) 모양 만들기 #2

by 돼지왕 왕돼지 2015. 4. 30.
반응형

[android] 일반적이지 않은 사진(이미지) 모양 만들기 #2


출처 : http://blog.stylingandroid.com/archives/2660


이전 글 : http://aroundck.tistory.com/2971


Shader 는 Canvas 에 그릴 때 fill style 을 정의할 때 사용되며, Paint 객체에 전달하여 사용된다.


이 방법은 BitmapShader 를 이용하며, round corner radius 를 bitmap 의 1/8 사이즈로 한다.

그리고 Canvas.drawRoundRect 를 이용하여 기존 이미지 형태의 rounded rect 를 대체한다.


public Bitmap processImage(Bitmap bitmap) {

    Bitmap bmp;

 

    bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);

    BitmapShader shader = new BitmapShader(bitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);

 

    float radius = Math.min(bitmap.getWidth(), bitmap.getHeight()) / RADIUS_FACTOR;

    Canvas canvas = new Canvas(bmp);

    Paint paint = new Paint();

    paint.setAntiAlias(true);

    paint.setShader(shader);

 

    RectF rect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());

    canvas.drawRoundRect(rect, radius, radius, paint);

 

    return bmp;

}



전달된 bitmap 과 같은 사이즈의 bitmap 을 만들고, BitmapShader 에 전달된 bitmap 을 assign 한다.

둥근 사각형을 만들기 위해 radius 를 구하여 roundRect 를 그릴 때 BitmapShader 를 포함한 Paint 를 전달하여 그린다.



이 방법은 이전 방법에 비해 우선 Bitmap 하나가 줄었고, ( memory 절약 )

Rounded Rect image 를 그릴 필요가 없으며,

전달되는 bitmap size 에도 유기적으로 대응 가능하다.







반응형

댓글