BitmapFactory неожиданно снимет изображение

В приложении для Android я загружаю и загружаю изображения в формате JPEG. Для некоторых изображений BitmapFactory загруженный образ, и я не понимаю, почему и как его остановить. Я регистрирую размер объекта Bitmap при загрузке и загрузке изображений:

Uploading image with size 3840x2160 Opening received image of size 2601584B degradation 0 decoded 384x216

Таким образом, моя ширина и высота изображения разделяются на 10 после декодирования BitmapFactory. Для другого изображения я перехожу от 3480x4640 до 217x290, поэтому деление на 16. Сначала я подумал, что это может быть вызвано метаданными dpi, поэтому я попытался заставить его при открытии изображения с помощью следующего кода:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 1 << degradation;
opts.inScaled = false;
opts.inDensity = 1;
opts.inTargetDensity = 1;
opts.inScreenDensity = 1;
final Bitmap original = BitmapFactory.decodeByteArray(data, 0, data.length, opts);
Log.d(Tags.IMAGES, "Opening received image of size " + data.length + " degradation " + degradation + " decoded " + original.getWidth() + "x" + original.getHeight());

Поскольку вы можете видеть количество байтов (2 МБ), которые я даю, BitmapFactory соответствует большому изображению, не имеющему изображение размером 300x200 пикселей. Поэтому мой код загрузки и код загрузки верны. У меня есть правильные данные перед декодированием.

Я заставил все плотности избежать масштабирования, а также отключил масштабирование, и мой размер выборки равен 1, так как моя деградация равна 0, поэтому я не заставляю какую-либо подвыборку. Я по-прежнему заканчиваю очень маленьким изображением. И BitmapFactory.decodeByteArray быстро вызывает собственный код, поэтому я не могу его отладить.

Я старался:

  • устанавливает всю плотность в объекте BitmapFactory.Options на 0, но это ничего не меняет.
  • устанавливая плотность растрового изображения перед загрузкой, никакого эффекта (первоначально эти два подвыбранных изображения имели плотность 420).
  • считывая размер растрового изображения до его полного декодирования (через justDecodeBounds), и размер, возвращенный таким образом, также слишком мал.
  • не передавать никаких параметров в метод decodeByteArray, но изображение слишком мало.

Ответ 1

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