Я заметил, что при чтении на одинаковой фотографии на устройствах в формате JPEG значения пикселей не совпадают. Они близки, но разные. При преобразовании в PNG файлы значения пикселей, похоже, совпадают.
Казалось бы, это связано с (un) алгоритмами сжатия между устройствами. Это то, что приходит в голову. Есть ли способ читать в файлах JPEG, чтобы одни и те же пиксели извлекались из фотографии на устройствах? Я не вижу опции в компоненте BitmapFactory Options.
В настоящее время применяется для поддержания размера при работе с пиксельными значениями изображения между устройствами:
Options options = new Options();
options.inScaled = false;
options.inPreferQualityOverSpeed = true;
В настоящее время сравниваются пиксели со следующим, чтобы посмотреть несколько (близкие совпадения, но не равные):
int[] pixels = new int[bitmapF.getWidth() * bitmapF.getHeight()];
bitmapF.getPixels(pixels, 0, bitmapF.getWidth(), 0, 0, bitmapF.getWidth(), bitmapF.getHeight());
Log.d("pixel entries", "pixels = " + pixels[233] + " - " + pixels[4002] + " - " + pixels[11391]);
Примечание. Если вы читаете в PNG-версии того же файла, который несжатый, значения идентичны, как ожидалось.
Samsung Galaxy S4, например, и Samsung Galaxy S5 даже имеют разные пиксели от одного и того же jpeg (отключение той же тестовой активности), хранящейся в папке с ресурсами.
pixel [233], например, будет -5205635 на s5, но -5336451 на s4. Пиксель [4002] также немного выключен. Но пиксель [11391] равен для обоих устройств на этом изображении jpeg.