Проблемы с записью BMP файла
От: wbear  
Дата: 06.09.22 09:52
Оценка:
Добрый день.
Помогите разобраться в вопросе определения длины файла BMP.

Суть вот в чем, по каналу связи принимается байтовый поток(данные) от сервера. Данные представляют собой команды и последовательность данных. Приняв порцию данных, определяем тип команды. В зависимости от типа команды сохраняем полученные данные в файл.

Одной из команд сервера является передача растрового файла в формате BMP. И вот возникла проблема с сохранением данных в файл формата BMP.

Приведу пример первых 54 байт получаемых данных из потока:
0x4D42 ; bfType
0x0000518E ; bfSize
0x00000000 ; bfReserved
0x00000436 ; bfOffBits
0x00000028 ; biSize
0x0000018A ; biWidth
0x00000032 ; biHeght
0x0001 ; biPlanes
0x0008 ; biBitCount
0x00000000 ; biCompression
0x00004D58 ; biSizeImage
0x00000EC4 ; biXPilsPerMeter
0x00000EC4 ; biYPilsPerMeter
0x00000000 ; biClrUsed
0x00000000 ; biClrImportant

Алгоритм такой, анализируем первые 54 байта. В поле bfSize указывается весь размер данных(размер файла BMP). На основании этого числа за вычетом (54) считываем из потока нужное количество байт. Записываем заголовок + считанные данные в файл и должен получиться графический файл в формате BMP.

Но что-то не так получается. Просмотреть файл в графическом вьювере не получается, пишет ошибка.

Предполагаю, что неправильно определяю длину данных.

На основании данных из заголовка пытаюсь альтернативным способом определить длину данных и результат вычисления не совпадает с bfSize.
bfSize = biSizeImage + 54

Как правильно определить длину.

К серверу доступа нет. Посмотреть файл BMP до передачи по сети тоже нет возможности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.