なんか同じ事を何度もやってるような気がしてきたので、クラス作っときました。
Bitmapを端末の画面サイズに合わせてリサイズします。縦横比は固定してるので、変な画像になることはないかと。画像扱う人はよくやる処理だと思うので、よかったら使ってやって下さい。パッケージ名は勝手に付けて下さい。
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.util.DisplayMetrics;
public class ImageUtils {
private static final String TAG = "ImageUtils";
public static Bitmap resizeBitmapToDisplaySize(Activity activity, Bitmap src){
int srcWidth = src.getWidth(); // 元画像のwidth
int srcHeight = src.getHeight(); // 元画像のheight
Log.d(TAG, "srcWidth = " + String.valueOf(srcWidth)
+ " px, srcHeight = " + String.valueOf(srcHeight) + " px");
// 画面サイズを取得する
Matrix matrix = new Matrix();
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
float screenWidth = (float) metrics.widthPixels;
float screenHeight = (float) metrics.heightPixels;
Log.d(TAG, "screenWidth = " + String.valueOf(screenWidth)
+ " px, screenHeight = " + String.valueOf(screenHeight) + " px");
float widthScale = screenWidth / srcWidth;
float heightScale = screenHeight / srcHeight;
Log.d(TAG, "widthScale = " + String.valueOf(widthScale)
+ ", heightScale = " + String.valueOf(heightScale));
if (widthScale > heightScale) {
matrix.postScale(heightScale, heightScale);
} else {
matrix.postScale(widthScale, widthScale);
}
// リサイズ
Bitmap dst = Bitmap.createBitmap(src, 0, 0, srcWidth, srcHeight, matrix, true);
int dstWidth = dst.getWidth(); // 変更後画像のwidth
int dstHeight = dst.getHeight(); // 変更後画像のheight
Log.d(TAG, "dstWidth = " + String.valueOf(dstWidth)
+ " px, dstHeight = " + String.valueOf(dstHeight) + " px");
src = null;
return dst;
}
}
使い方は、Activity内でしか使えませんが、
Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.src_image); Bitmap dst = ImageUtils.resizeBitmapToDisplaySize(this, src);
みたいな感じですかね。
