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

[android] Circular Bitmap 만들기 ( 동그란 프로필 사진 )

by 돼지왕 왕돼지 2017. 7. 13.
반응형

 [android] Circular Bitmap 만들기 ( 동그란 프로필 사진 )


http://frogermcs.github.io/InstaMaterial-concept-part-6-user-profile/


Android, bitmap, bitmapshader, Canvas, circular bitmap, CLAMP, getconfig, setshader, squaredBitmap, tilemode, Transformation, [android] Circular Bitmap 만들기 ( 동그란 프로필 사진 ), 동그란 프로필 사진


-

public class CircleTransformation implements Transformation {


    private static final int STROKE_WIDTH = 6;


    @Override

    public Bitmap transform(Bitmap source) {

        int size = Math.min(source.getWidth(), source.getHeight());


        int x = (source.getWidth() - size) / 2;

        int y = (source.getHeight() - size) / 2;


        Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);

        if (squaredBitmap != source) {

            source.recycle();

        }


        Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());


        Canvas canvas = new Canvas(bitmap);


        Paint avatarPaint = new Paint();

        BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); // bound 를 넘어가면 edge color 로 채움 

        avatarPaint.setShader(shader);


        Paint outlinePaint = new Paint();

        outlinePaint.setColor(Color.WHITE);

        outlinePaint.setStyle(Paint.Style.STROKE);

        outlinePaint.setStrokeWidth(STROKE_WIDTH);

        outlinePaint.setAntiAlias(true);


        float r = size / 2f;

        canvas.drawCircle(r, r, r, avatarPaint); // cx, cy, radius, paint

        canvas.drawCircle(r, r, r - STROKE_WIDTH / 2, outlinePaint);


        squaredBitmap.recycle();

        return bitmap;

    }


    @Override

    public String key() {

        return "circleTransformation()";

    }

}



-
Code 제작자는 Transformation 을 만들어서 Picasso lib 에 전달하는데,
Circular Bitmap 이 필요하면 그냥 위의 소스를 Util 처럼 만들어서 Set 해도 된다.




반응형

댓글