こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Androidアプリ開発 画像の回転について

CANVASに画像を表示し、その画像を回転させるようにしたいのですが、どうにもうまくいかなくて困っています。

画像の中心を軸に回転させたいと思って以下のように実装してみたのですが、うまくいきません。

//////////////////////////////以下抜粋////////////////////////////////
Matrix matrix;

// Bitmap のサイズの取得
int width = bmp.getWidth();
int height = bmp.getHeight();

matrix = new Matrix();

// 画像の中心を軸に回転させるようにする(ここがうまくいっていないっぽい・・・)
matrix.postRotate(5.0f, width / 2.0f, height / 2.0f);

// 回転させた画像を生成する
bmp2 = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true);

// CANVASに画像を描画する
canvas.drawBitmap(bmp2 , 10.0f, 10.0f, paint);

//////////////////////////////////////////////////////////////////////

上記のコードで画像自体は回転するのですが、中心軸がずれてしまっているようです。

画像のサイズは横15ピクセル、縦15ピクセルとなっております。

また、matrix.postRotateの前でmatrix.postTranslate()にて軸を設定してみたのですが、
これもうまくいきませんでした。

きれいに画像を回転させるにはどのようにすればよいか、わかる方いましたら教えて
いただけないでしょうか?

投稿日時 - 2011-04-20 17:10:49

QNo.6681742

困ってます

質問者が選んだベストアンサー

その方式ならちゃんと中心で回ってますが、
表示される位置が変わるってことになります。
つまり元のは100px辺の正方形だったとしても
bmp2にクリエイトビットマップされるときにはbmp2は幅100ではなくなってるんです。
45度にかたむけたとしたら100px正方の対角線の長さに画像の大きさが大きくなってしまい。
そのbmp2の描くポジションが同じ数値位置にとどめアニメなどするとぎったんばっこんすることになります。
なので、そのbmp2をクロップし100px幅のに収めるか、(図によっては角が切れます)。
もしくは、角度変えた都度都度表示位置をずらし修正してやります。
bmp2のgetWidth()と元bmpのgetWidth()の差の半分でトランスレート位置を計算し反映させれば真ん中でキレイに廻ってるように見せられるでしょう。

投稿日時 - 2011-04-20 17:35:57

お礼

回答ありがとうございます!!

言われみて気付きました。確かにそうですね。
画像を回転させると画像のサイズが大きくなってしまいますね!

解決しました、ありがとうございました!

投稿日時 - 2011-04-20 17:52:33

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

ちなみにbmp2のトランスレートてのは、そのマトリクスにするんでなく
キャンバスにドロウするときのx.y位置を都度都度ずらしたればいいという事になります

投稿日時 - 2011-04-20 17:38:36

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-