ページ 11

[Android]Bitmapの中央寄せ

Posted: 2013年4月05日(金) 21:51
by ひよつこ
お久しぶりです。
ひよつこです。
早速ですが質問させていただきます。

現在Viewのサイズに合わせてBitmapをリサイズし、Viewの中央に寄せる処理をさせたいと思っています。

コード:

	float mWidth,mHeight;	//ImageViewの幅と高さ
	Bitmap bmp = BitmapFactory.decodeFile(画像ファイルのパス);
	float scaleX = mWidth / bmp.getWidth();
	float scaleY = mHeight / bmp.getHeight();
	Matrix matrix = new Matrix();
	if(scaleX < scaleY){
		matrix.preScale(scaleX, scaleX);
		matrix.postTranslate(0, (mHeight - (bmp.getHeight() * scaleX) ) / 2);
	}else if(scaleX > scaleY){
		matrix.preScale(scaleY, scaleY);
		matrix.postTranslate((mWidth - (bmp.getWidth() * scaleY) ) / 2, 0);
	}
	Bitmap bmp2 = Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,true);
	ImageView.setImageBitmap(bmp2);
と書いたのですが、リサイズされるだけでViewの中央に寄せられません。

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

Re: [Android]Bitmapの中央寄せ

Posted: 2013年4月06日(土) 00:05
by ISLe
Viewのサイズに合わせたいのなら、bmp2を作成するサイズが間違ってませんか?

Re: [Android]Bitmapの中央寄せ

Posted: 2013年4月10日(水) 21:48
by ひよつこ
bmp2を作成するサイズが間違っているとはcreateBitmap()が間違っているのでしょうか。

Re: [Android]Bitmapの中央寄せ

Posted: 2013年4月10日(水) 23:37
by ISLe
bmp.getWidth(),bmp.getHeight()というのは元のビットマップの幅や高さではないでしょうか。

Viewのサイズでビットマップを作成しないと余白分がScaleTypeに依存してしまうのでは?

Re: [Android]Bitmapの中央寄せ

Posted: 2013年4月16日(火) 22:48
by ひよつこ
返信ありがとうございます。

Viewのサイズでビットマップを作成するとはどういうことでしょうか。
createBitmap(元のbitmap,0,0,Viewの幅,Viewの高さ,マトリックス,true);
とすると"元のbitmapより大きい幅のbitmapは作成できない"という内容のエラーが出ます。
やり方が間違っているのでしょうか。

Re: [Android]Bitmapの中央寄せ

Posted: 2013年4月16日(火) 23:31
by ISLe
ソースビットマップを指定しないでViewと同じ大きさのビットマップを作成し、それに対して描画すれば良いのでは?

そのViewと同じ大きさのビットマップをそのままViewに描画することになりますが。

Viewと同じ大きさのビットマップに描画するコードはViewに直接描画するのと同一のコードになります。

そこまでしてViewに直接描画することを避けたい理由は何でしょうか。
以前のスレでそんなことをおっしゃってましたよね。

Re: [Android]Bitmapの中央寄せ

Posted: 2013年4月17日(水) 19:56
by ひよつこ
返信ありがとうございます。
Canvasを使って新しいBitmapに描画することで中央寄せが実現できました。

実は現在ビュアーアプリもどきを開発しており、
そのなかでズーム処理やドラッグ処理が必要になっています。
それをMatrixでスムーズに行うために加工済みのBitmapをViewに描画したかったのです。
ズーム処理やドラッグ処理は現在実装中ですが、またつまづいたときはよろしくお願いします。