Изображения JPEG имеют разные значения пикселей на нескольких устройствах
Я заметил, что при чтении одинаковых фотографий на разных устройствах в формате JPEG значения пикселей не совпадают. Они близки, но разные. При преобразовании в файлы PNG значения пикселей, похоже, совпадают.
Казалось бы, это будет связано с (не) алгоритмами сжатия на разных устройствах. Это то, что приходит на ум в любом случае. Есть ли способ чтения в файлах JPEG, чтобы из фотографий были получены одинаковые пиксели на разных устройствах? Я не вижу опцию в компоненте параметров BitmapFactory.
В настоящее время применяется следующее для поддержания размера при работе со значениями пикселей изображения на разных устройствах:
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-файла (с запуском одного и того же теста), хранящегося в папке ресурсов.
Например, пиксель [233] будет равен -5205635 для s5, но -5336451 для s4. Пиксель [4002] также немного отстает. Но пиксель [11391] одинаков для обоих устройств на этой картинке JPEG.