読者です 読者をやめる 読者になる 読者になる

And Q.

思ったことを書きます

画像を丸くくり抜く

Android

google+のアプリとかでプロフィールアイコンが丸くなってたりするじゃないですか!!
アレどーやるんだろうと調べてたらできたのでメモ。

// bitmapは元の画像
Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);

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

Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(shader);

int circleCenter = bitmap.getWidth() / 2;

Canvas canvas = new Canvas(circleBitmap);
// 元の画像の中心点に、元の画像の半分のサイズの半径で円を描く
canvas.drawCircle(circleCenter, circleCenter, circleCenter, paint);

//imageViewはなんか適当に用意する
imageView.setImageBitmap(circleBitmap);

ついでに縦や横に長い画像をやる場合。
こういうのは真ん中で正方形にくり抜いてからやった方がいいよね、というわけで正方形にするメソッド

int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap croppedBitmap;
if (width > height) {
  croppedBitmap = Bitmap.createBitmap(bitmap, width / 2 - height / 2, 0, height, height);
} else {
  croppedBitmap = Bitmap.createBitmap(bitmap, 0, height / 2 - width / 2, width, width);
}
return croppedBitmap;