У меня есть большое растровое изображение (скажем, 3888x2592) в файле.Теперь я хочу изменить размер этого растрового изображения до 800x533 и сохранить его в другом файле.Обычно я масштабирую растровое изображение, вызывая метод Bitmap.createBitmap
, но для него требуется исходное растровое изображение в качестве первого аргумента, который я не могу предоставить, поскольку загрузка исходного изображения в объект растрового изображения, конечно, будет превышать объем памяти (см. здесь, например).
Я также не могу прочитать растровое изображение, например, с 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, но это не сработало.