[Android] BitmapをViewに合わせてリサイズしたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ひよつこ

[Android] BitmapをViewに合わせてリサイズしたい

#1

投稿記事 by ひよつこ » 13年前

こんにちは、ひよつこです。
前トピックでもアドバイスをいただきましたが、問題の解決に到らなかったため、本トピックを挙げさせていただきました。

現在、ViewFlipperにImageViewをセットし、ImageViewにBitmapを描画するときに、
BitmapのサイズをImageViewに合わせる処理をさせたいと思っています。
そこで

コード:

float mWidth,mHeight;   //ViewFlipperの幅と高さ
ImageView image;        //ViewFlipperにセットするImageView

public Bitmap makeBitmap(String filePath){
   Bitmap bmp = BitmapFactory.decodeFile(filePath);
   Matrix matrix = new Matrix();
   float scaleX = mWidth / bmp.getWidth();
   float scaleY = mHeight / bmp.getHeight();
   matrix.postScale(Math.min(scaleX,scaleY),Math.min(scaleX,scaleY));
   return Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
}

public void setBitmap(String filePath){
   image.setImageBitmap(makeBitmap(filePath));
}
と記述しましたが、Bitmapがリサイズされなかったり、強制終了されたりと、表示する画像によって異なるエラーが発生します。
mWidthもmHeightも正しい値なハズです。

いったい何が問題なのでしょうか。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: [Android] BitmapをViewに合わせてリサイズしたい

#2

投稿記事 by ISLe » 13年前

ImageViewに(setScaleTypeを使って)ImageView.ScaleType.FIT_CENTERをセットしておくだけで良いのでは。

ひよつこ

Re: [Android] BitmapをViewに合わせてリサイズしたい

#3

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。

ImageViewのsetScaleTypeの存在は知っていましたが、
今回の処理のほかにmatrixを使ってImageViewを操作したいので、
ImageView.ScaleType.MATRIXの状態にしておく必要があります。

ScaleType.FIT_CENTER以外に方法はないのでしょうか。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: [Android] BitmapをViewに合わせてリサイズしたい

#4

投稿記事 by ISLe » 13年前

ビットマップを作り直すよりは、ImageView#setImageMatrixを使ったほうが簡単だと思いますけど。

どこで落ちているかとか変数の値が期待通りかどうかとか、デバッガを使ったりログ出力したりして確認しましたか?

ひよつこ

Re: [Android] BitmapをViewに合わせてリサイズしたい

#5

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。

やはり自分としてはBitmapを加工したいと思っています。

LogCatで調べてみると、
Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
の部分で java.lang.IllegalArgumentException: width and height must be > 0 というエラーが出ていました。
しかし、createBitmapの1行を消してViewFlipperとbmpの幅と高さを確認しましたが、異常はありませんでした。

また、ViewFlipperのサイズ > Bitmapのサイズ の時は
強制終了せず、Bitmapのリサイズも行われません。
そして、ViewFlipperのサイズ < Bitmapのサイズ の時は
強制終了し、上記のIllegalArgumentExceptionが投げられます。

現在わかっていることは以上です。
よろしくお願いします。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: [Android] BitmapをViewに合わせてリサイズしたい

#6

投稿記事 by ISLe » 13年前

おかしいですね。
こちらで同じコードを動かしても異常は無いのですが。

ほんとうにmWidth,mHeightはfloatなのでしょうか。
これがintだとおっしゃるとおりになりますけど。

IllegalArgumentExceptionは画像のサイズが異常に大きい可能性もありますけど、そもそも読み込みでエラーになるはずですし。

ひよつこ

Re: [Android] BitmapをViewに合わせてリサイズしたい

#7

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。

調べてみたところonSizeChanged()で得たViewのサイズをint型のまま使っていました。

どうもありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る