Я загружаю изображения из URLS, которые имеют разные размеры. Похоже, что более мелкие из них проходят, а nullPointerException (отображается в Log.d ниже) появляется для более крупных. Как я могу изменить эти изображения?
BitmapDrawable drawable = null;
Bitmap bitmap = null;
try {
bitmap = loadBitmapFromWeb(url);
System.out.println("url " + url);
} catch (IOException e) {
}
int width = 150;
int height = 150;
try {
drawable = resizeImage(bitmap, height, width);
} catch (Exception e) {
Log.d("exception image", e.toString());
drawable = getDrawableFromResource(R.drawable.default_backup);
}
Это то, что я использую для загрузки с URL-адреса:
public static Bitmap loadBitmapFromWeb(String url) throws IOException {
InputStream is = (InputStream) new URL(url).getContent();
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
Это то, что я использую для изменения размера, где появляется ошибка:
public static BitmapDrawable resizeImage(Bitmap bitmap, int w, int h) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = w;
int newHeight = h;
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,
matrix, true);
return new BitmapDrawable(resizedBitmap);
}
Почему бы вам не использовать доступную функцию Bitmap для изменения размера. Предположим, что вы загрузили правильное изображение, вам просто нужно сделать следующее:
Bitmap scaledImage = Bitmap.createScaledBitmap(originalImage, newWidth, newHeight, false);