JPEG байтов в шестнадцатеричное значение
Я получаю поток через uvc, который дает мне каждый поток mjpeg.
При записи фрейма jpeg в растровое изображение массив байтов, просматриваемый отладчиком, выглядит следующим образом:
{ 0, -128, 1, -128, 0, -128, .......}
Я создаю файл, выполнив это:
bitmap.copyPixelsFromBuffer(frame);
File file = new File(Constants.CAPTURE_PATH, System.currentTimeMillis() + ".jpeg");
file.createNewFile();
out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
После того, как я создаю файл и просматриваю его с помощью шестнадцатеричной программы просмотра, файл выглядит следующим образом:
FF D8 FF E0 00.....
Означает ли это, что {0} стал FF, а {-128} стал D8?
Какие правила сделали это возможным? Любая помощь будет очень благодарна.
2 ответа
Возможно, вы просматриваете заголовок файла JPEG, если это самые первые байты в файле, как видно из шестнадцатеричной программы просмотра файла. FF D8 FF
выглядят поразительно похожими. Смотрите здесь, например, и страницу википедии здесь.
Я ожидаю, что данные, которые вы просматриваете в отладчике, являются необработанными данными изображения, которые не будут содержать заголовок.
После нашего краткого разговора в комментариях, я чувствую, что это информация, которую вы ищете.
На самом деле вы смотрите на заголовок файла. Заголовок - это, по сути, блок кода в начале файла, который сообщает компьютеру, что это такое, поэтому он знает, что с ним делать.
Дополнительная информация о заголовках файлов: https://www.webopedia.com/TERM/H/header.html
Теперь к вашей конкретной проблеме. С jpegs (как и любой другой файл) у них есть свои собственные заголовки и способ организации данных. Заголовок JPEG начинается с FF D8
что для читателя файла JPEG означает SOI (начало изображения). Затем идет FF E0
что означает APP0 (сегмент приложения). И список продолжается.
Подробнее о файлах JPEG: https://web.archive.org/web/20120403212223/http://class.ee.iastate.edu/ee528/Reading%20material/JPEG_File_Format.pdf
Что вам нужно сделать, это прыгнуть за заголовок и начать искать ваши "фактические" данные. Несколько хитрая часть заголовков jpeg-файлов заключается в том, что они не имеют одинаковый размер, поэтому вам придется искать маркер SOS (начало сканирования), если я не ошибаюсь, и идти оттуда.