Изменение размера большого растрового файла до масштабированного выходного файла на Android - PullRequest
208 голосов
/ 26 июля 2010

У меня есть большое растровое изображение (скажем, 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, но это не сработало.

Ответы [ 21 ]

0 голосов
/ 07 января 2013

На сайте Android-разработчика есть отличная статья об этой проблеме: Эффективная загрузка больших растровых изображений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...