У меня есть потоки необработанных данных от файлов изображений, как:
vector<char> rawData(fileSize);
ifstream inFile("image.jpg");
inFile.read(&rawData[0]);
Я хочу проанализировать заголовки различных форматов изображения для высоты и ширины. Существует ли портативная библиотека, что банка может считать ints, longs, короткие замыкания, и т.д. от буфера/потока, преобразовывающего для порядка байтов, как указано?
Я хотел бы смочь сделать что-то как: short x = rawData.readLeShort(offset);
или long y = rawData.readBeLong(offset)
Ровным более оптимальным вариантом была бы легкая и портативная библиотека метаданных изображения (без дополнительного веса библиотеки обработки изображения), который может работать над необработанными данными изображения. Я нашел, что библиотеки Exif там не поддерживают png
и gif
.
Это не так уж и сложно сделать самому. Вот как вы можете прочитать 32-битное число с прямым порядком байтов:
unsigned char buffer[4];
inFile.read(buffer, sizeof(buffer));
unsigned int number = buffer[0] +
(buffer[1] << 8) +
(buffer[2] << 16) +
(buffer[3] << 24);
и прочитать 32-битное число с прямым порядком байтов:
unsigned char buffer[4];
inFile.read(buffer, sizeof(buffer));
unsigned int number = buffer[3] +
(buffer[2] << 8) +
(buffer[1] << 16) +
(buffer[0] << 24);