2013-11-19

[Android, Java] ビットマップを円、丸角などに切り抜くクラス『BitmapTrim』を公開(ダウンロード可)

今回もゲームアプリ制作に必要となったので、ビットマップを簡単に切り抜くクラスを作成しました。すぐに作成できるかと思いきや、いろんなやり方がありましたし、途中「え!じゃあ全部やり直し(xox)」なんてこともありましたので、多少時間がかかってしまいました。(笑)
GitHub で公開していますので、使ってみたい方はぜひやってみてください。




[何ができる?]
画像の一部分だけを切り取ることができます。(縮小ではありません。)簡単に言うと、自分が写っている写真の顔の部分だけハサミで切り取るイメージです。^-^


では、使い方を順を追って説明します。
まずはインスタンス&アンチエイリアスの設定です。

[インスタンス] 

BitmapTrim bitmapTrim = new BitmapTrim(width, height);


ここのwidth, height は今から作りたいビットマップ(画像)の大きさです。
つまり、以下のように角だけ丸くしたい場合は、元の画像のサイズを設定してください。
イメージは「今から絵を書くけど、紙はどの大きさにするの?」です。 



[アンチエイリアス] 

bitmapTrim.setAntiAlias(true); 

これはオプションなので、アンチエイリアスが必要ない場合はこの行も必要ありません。


では次に、切り取る方法を決めます。
4つの方法があるので、お好きなものを選んでください。
つまり、円に切り取られたビットマップが欲しいなら「円」を見てください。

[切り取る方法]

(円)
bitmapTrim.setTrimCircle(cx, cy, radius);


cx: 中心点のX座標
cy: 中心点のY座標
radius: 半径の長さ


(楕円形)
bitmapTrim.setTrimOval(new RectF(0, 0, width, height);

作りたい楕円のRectFを設定するだけです。
上の例は、画像いっぱいの楕円形ができあがります。


(丸角)
bitmapTrim.setTrimRoundRect(
    new RectF(0, 0, width, height), 
    rx, 
    ry
);


1つ目は範囲を示すRectF。 rx, ry は丸角の半径XとYになります。
(簡単に言うと、rxとryが大きいほど丸に近づきます。)


 (長方形&正方形)
bitmapTrim.setTrimRect(new RectF(0, 0, width, height);
 

これも RectF を設定するだけです。 
つまり、width と height が同じなら正方形になります。


はい!
では次にビットマップを書き込みましょう。
(イメージは切り取った紙に絵を描いていく作業です。)


 [ビットマップの書き込み]
   
bitmapTrim.drawBitmap(bitmap1, left, top);
bitmapTrim.drawBitmap(bitmap2, left, top);
bitmapTrim.drawBitmap(bitmap3, left, top);


left と top は書き込む基準になるXY座標です。
以下の画像を参考にしてください。
ビットマップは、何回でも上から重ねて書き込めます。




つまり、通常でしたらどちらもゼロでOKですね。 


さあ、最後にビットマップの取得です。


[ビットマップの取得]

Bitmap bitmap = bitmapTrim.getBitmap();


使い方は以上です。^-^


[ダウンロードURL]
以下のGitHubページから『BitmapTrim』をダウンロードできます。

https://github.com/SUKOHI/BitmapTrim


[ちなみに]
はじめは clipPath() を使って完成させようとしましたが、これだとアンチエイリアスが効かない(切り口がきれいにならない)ので、違う方法を採用しました。


[参考URL]
Cropping Circular Area from bitmap in android
Your brainstorming also helped me.
Thank you, Altaf.

それにしても僕が参考にしてるページって Stack Overflow率が高いです。
いつも助けていただいて、本当にありがとうございます。^-^

0 件のコメント:

コメントを投稿