Расшифровка растровых изображений в Android с нужным размером

Я декодирую растровые изображения с SD-карты, используяBitmapFactory.decodeFile, Иногда растровые изображения больше, чем нужно приложению или что позволяет куча, поэтому я используюBitmapFactory.Options.inSampleSize запросить субдискретизированное (меньшее) растровое изображение.

Проблема в том, что платформа не обеспечивает точное значение inSampleSize, и я иногда получаю растровое изображение либо слишком маленькое, либо слишком большое для доступной памяти.

Отhttp://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize:

Примечание: декодер попытается выполнить этот запрос, но результирующее растровое изображение может иметь разные размеры, точно такие, которые были запрошены. Кроме того, степени 2 часто быстрее / легче для чести декодера.

Как мне декодировать растровые изображения с SD-карты, чтобы получить растровое изображение именно того размера, который мне нужен, и потреблять как можно меньше памяти для его декодирования?

Редактировать:

Текущий исходный код:

BitmapFactory.Options bounds = new BitmapFactory.Options();
this.bounds.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, bounds);
if (bounds.outWidth == -1) { // TODO: Error }
int width = bounds.outWidth;
int height = bounds.outHeight;
boolean withinBounds = width <= maxWidth && height <= maxHeight;
if (!withinBounds) {
    int newWidth = calculateNewWidth(int width, int height);
    float sampleSizeF = (float) width / (float) newWidth;
    int sampleSize = Math.round(sampleSizeF);
    BitmapFactory.Options resample = new BitmapFactory.Options();
    resample.inSampleSize = sampleSize;
    bitmap = BitmapFactory.decodeFile(filePath, resample);
}

Ответы на вопрос(10)

Ваш ответ на вопрос