私はこの機能を持っています:
public static Bitmap getResizedBitmap(Bitmap bm,Context c) {
int width =(int) dp2px(bm.getWidth(),c);
int height = (int) dp2px(bm.getHeight(),c);
float scaleWidth = ((float) 250) / width;
float scaleHeight = ((float) 170) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
return resizedBitmap;
}
dp2px は次のとおりです。
private static float dp2px(int dip, Context context){
float scale = context.getResources().getDisplayMetrics().density;
return dip * scale + 0.5f;
}
ほとんどの画面では問題ありませんが、たとえば、galaxy s3 では返されます。
java.lang.IllegalArgumentException: x+width は <= bitmap.width() でなければなりません
この行で:
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);