ページ 11

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

Posted: 2013年3月13日(水) 15:28
by ひよつこ
こんにちは、ひよつこです。
前トピックでもアドバイスをいただきましたが、問題の解決に到らなかったため、本トピックを挙げさせていただきました。

現在、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も正しい値なハズです。

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

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

Posted: 2013年3月13日(水) 16:48
by ISLe
ImageViewに(setScaleTypeを使って)ImageView.ScaleType.FIT_CENTERをセットしておくだけで良いのでは。

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

Posted: 2013年3月13日(水) 16:57
by ひよつこ
返信ありがとうございます。

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

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

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

Posted: 2013年3月13日(水) 17:10
by ISLe
ビットマップを作り直すよりは、ImageView#setImageMatrixを使ったほうが簡単だと思いますけど。

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

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

Posted: 2013年3月13日(水) 19:49
by ひよつこ
返信ありがとうございます。

やはり自分としては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が投げられます。

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

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

Posted: 2013年3月14日(木) 00:52
by ISLe
おかしいですね。
こちらで同じコードを動かしても異常は無いのですが。

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

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

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

Posted: 2013年3月14日(木) 23:14
by ひよつこ
返信ありがとうございます。

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

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