Здравствуйте)
Хотелось бы получить какие-то наводки по данному вопросу, какую-то конкретную литературу/ссылки/личные советы
Все будет полезно
На си, bmp картинка!)
Для правильного вопроса надо знать половину ответа
Если хотите делать всё самостоятельно, то начните, например, отсюда: https://en.wikipedia.org/wiki/BMP_file_format
В принципе, для b/w (1bpp) и grayscale (8bpp) достаточно перевернуть палитру.
Можно уточняющий вопрос?
Палитра находится сразу после BITMAPINFOHEADER?
То есть fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);
Где bfOffBits - смещения для поля данных?
И вот еще тоже вопрос, я же считываю как hex, то есть мне достаточно транспонировать массив, считанных данных, после bfOffBits
А так же, немного не понял, что значат значения в скобках(1bpp) как понимаю это bits per pixel
Простите за глупые вопросы(возможно), просто хотелось бы уточнить некоторые недопонимания для себя=)
Транспонировать - это поменять местами столбцы и колонки массива, то есть повернуть его. Здесь вам никакого транспонирования не нужно.
bpp - bits per pixel, количество битов, отведённых под один пиксел изображения. Находится в поле BITMAPINFOHEADER.biBitCount.
Палитра находится сразу после BITMAPINFOHEADER?
Да. Но палитры, в общем случае, может и не быть, надо смотреть поле BITMAPINFOHEADER.biBitCount
То есть fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);
Нет, в этом месте начинается данные о пикселах изображения. Палитра начинается по смещению BITMAPINFOHEADER.biSize + sizeof(BITMAPFILEHEADER).
Алексей Майрин: Изменить цвета палитры на комплиментарные.
В простейшем случае, 1 бит на пиксел, в палитре будут два цвета, чёрный и белый. Если заменить их на противоположные, картинка должна инвертироваться.
Алексей Майрин: Потому что в файле друг за другом записаны BITMAPFILEHEADER, BITMAPINFOHEADER, палитра и пикселы. Размер BITMAPFILEHEADER фиксирован, размер BITMAPINFOHEADER записан в biSize.