なんか同じ事を何度もやってるような気がしてきたので、クラス作っときました。
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);
みたいな感じですかね。