В фиксированных местах в метаданных файла есть три важных целых числа, каждое из которых хранится с использованием ровно 4 байтов:
С байтовым смещением 10-13, смещение в файле битовой карты, где находится массив пикселейначинается.
По байтовому смещению 18-21 - ширина изображения в пикселях.
По байтовому смещению 22-25 - высота изображения в пикселях.
/*
* Read in the location of the pixel array, the image width, and the image
* height in the given bitmap file.
*/
void read_bitmap_metadata(FILE *image, int *pixel_array_offset, int *width, int *height) {
fseek(image, 10, SEEK_SET);
fread(pixel_array_offset, 4, 1, image);
fseek(image, 18, SEEK_SET);
fread(width, 4, 1, image);
fseek(image, 22, SEEK_SET);
fread(height, 4, 1, image);
}
Должен ли я использовать fseek
3 раза здесь, даже заметить, что ширина и высота постоянно?