У меня есть большой битмап (скажем, 3888x2592) в файле. Теперь я хочу изменить размер растрового изображения до 800x533 и сохранить его в другом файле.
Я обычно масштабировал растровое изображение, вызывая метод Bitmap.createBitmap
, но для первого аргумента он должен иметь исходный битмап, который я не могу предоставить, поскольку загрузка исходного изображения в объект Bitmap будет, конечно, превышать память (см. здесь, например).
Я также не могу прочитать растровое изображение с, например, BitmapFactory.decodeFile(file, options)
, предоставляя BitmapFactory.Options.inSampleSize
, потому что я хочу изменить его размер до точной ширины и высоты. Использование inSampleSize
приведет к изменению размера растрового изображения до 972x648 (если я использую inSampleSize=4
) или 778x518 (если я использую inSampleSize=5
, который даже не имеет значения 2).
Я также хотел бы избежать чтения изображения с использованием inSampleSize с, например, 972x648 на первом шаге, а затем изменить его размер до 800x533 на втором шаге, потому что качество будет плохим по сравнению с прямым изменением размера оригинала изображение.
Подводя итог моему вопросу: Есть ли способ прочитать большой файл изображения с 10 или более мегабайтами и сохранить его в новом файле изображения, измененном до определенной ширины и высоты, без получения исключения OutOfMemory?
Я также пробовал BitmapFactory.decodeFile(file, options)
и устанавливал значения Options.outHeight и Options.outWidth вручную до 800 и 533, но это не работает.