Я сейчас работаю над небольшим приложением Server-Client с сервером, находящимся на компьютере и клиентом на устройстве Android. В какой-то момент я хочу, чтобы устройство проверяло, имеет ли изображение, которое оно имеет в актуальном состоянии, и использует как можно меньше данных, поэтому я написал код для создания контрольной суммы для изображения, которое должно облегчить для клиента определение является ли это pic актуальным или нет.
(я собирался отправить код, но это было довольно давно, так что я буду стараться без первого) В псевдокоде:ImageIO.read() и BitmapFactory.decodeByteArray()
long getCheckSumFor(Image i) {
long xVal;
long yVal;
count x from 0 to i.width
long val = 0;
count y from 0 to i.height
val += i.getPixel(x, y);
yVal += val % Integer.MAX_VALUE;
count y from 0 to i.height
long val = 0;
count x from 0 to i.width
val += i.getPixel(x, y);
xVal += val % Integer.MAX_VALUE;
int tx = xVal % Integer.MAX_VALUE;
int ty = yVal % Integer.MAX_VALUE;
return a long with the first 4 bytes taken from ty and the last 4 bytes taken from tx
}
это в основном, как это работает, но это дает разные выходы для одних и тех же исходных данных (в зависимости от платформы, ПК или Android).
Я использую ImageIO.read()
на ПК и BitmapFactory.decodeByteArray()
(без BitmapFactory.Options), чтобы прочитать изображение и отладки, показал, что yVal уже отличается от платформы к платформе, поэтому я предполагаю, что могут быть небольшие различия в том, как каждый метод читает JPEG? И если это правда, есть ли способ, каким образом я мог бы читать их одинаково?
Спасибо заранее,
Sheldon
Image.getPixel() на Android не существует. Так где ты говоришь? И почему вы говорите или используете BitmapFactory? Сначала вы не сделаете растровое изображение? Я думаю, ваш сервер будет служить файлу изображения. Так что контрольные суммы над байтами над файлом изображения. Но какой смысл это сделать, чтобы сначала загрузить файл, а затем вычислить контрольную сумму? – greenapps
Image.getPixel() также не существует на ПК, по крайней мере, не в java (это Pseudocode, поэтому API не используется) Я говорю о том, чтобы рассказать вам о методе, поэтому, если в нем есть какие-либо ошибки, легче выявить проблемы. BitmapFactory может читать JPEG, а также другие форматы изображений (насколько я слышал из Интернета, и он отлично декодируется, изображение выглядит правильно). Я когда-либо говорил, что я загружаю файл изображения раньше? Нет. Android и ПК используют один и тот же ввод, но из разных источников. – Sheldon
Почему вы не реагируете на определение контрольной суммы над байтами файла изображения? В этом весь смысл. Не используйте для этого Bitmap и BitmapFactory. – greenapps