что это значит {fseek (inptr, - (bi.biWidth * 3 + padding), SEEK_CUR);} в программе, которая изменяет размер изображения bmp? - PullRequest
0 голосов
/ 04 мая 2019

Я не совсем понимаю необходимость этого кода здесь.

// skip over padding, if any
fseek(inptr, padding, SEEK_CUR);

// then add it back (to demonstrate how)
for (int k = 0; k < new_padding; k++)
{
    fputc(0x00, outptr);
}

if (repeat < n - 1)
{
    fseek(inptr, - (bi.biWidth * 3 + padding), SEEK_CUR);
}

1 Ответ

1 голос
/ 04 мая 2019

Трудно подтвердить правильность или даже актуальность этого фрагмента кода без полного контекста.

fseek перемещает указатель входного потока вперед на padding байт.

Затем программа выводит new_padding нулевых байтов в выходной поток, предположительно отличающийся от padding.Формат файла BMP от Microsoft требует некоторого заполнения в разных местах для облегчения чтения в память.

Наконец, fseek используется снова, чтобы установить указатель входного потока назад к началу ряда пикселей (3 байта напиксель) плюс отступ, который он пропустил, но только если (repeat < n - 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...