Программирование графики на языке Си с помощью Bitmap C
Bitmap в программировании - это способ представления и хранения изображений. Bitmap представлен в виде двумерного массива, каждый элемент которого представляет цвет одного пикселя. В зависимости от битности изображения, цвет пикселя может быть представлен от 1 бита до 32 битов.
С помощью битмапов можно создавать и редактировать изображения на основе пикселей. Например, можно использовать битмапы для создания игр, рисования графиков, создания визуализации данных и т.д.
Пример кода для создания битмапа в C++:
cpp
#include
#include
struct BitmapHeader {
uint16_t signature;
uint32_t fileSize;
uint32_t reserved;
uint32_t dataOffset;
uint32_t headerSize;
uint32_t width;
uint32_t height;
uint16_t colorPlanes;
uint16_t bitsPerPixel;
uint32_t compressionMethod;
uint32_t imageSize;
uint32_t horizontalResolution;
uint32_t verticalResolution;
uint32_t colorsInPalette;
uint32_t importantColors;
};
struct Rgb {
uint8_t blue;
uint8_t green;
uint8_t red;
};
int main() {
BitmapHeader header = { // Задаём заголовок файла
.signature = 0x4D42,
.fileSize = sizeof(BitmapHeader) + sizeof(Rgb) * 256, // Общий размер файла в байтах
.reserved = 0,
.dataOffset = sizeof(BitmapHeader) + sizeof(Rgb) * 256, // Смещение до массива пикселей
.headerSize = 40,
.width = 256,
.height = 256,
.colorPlanes = 1,
.bitsPerPixel = 8,
.compressionMethod = 0,
.imageSize = 0,
.horizontalResolution = 0,
.verticalResolution = 0,
.colorsInPalette = 256,
.importantColors = 0,
};
std::ofstream file("image.bmp", std::ios::binary); // Открываем файл в бинарном режиме
file.write(reinterpret_cast(&header), sizeof(BitmapHeader)); // Записываем заголовок в файл
Rgb palette[256]; // Создаём массив палитры цветов
for (int i = 0; i < 256; i++) { // Задаём палитру цветов
palette[i].blue = i;
palette[i].green = i;
palette[i].red = i;
}
file.write(reinterpret_cast(&palette), sizeof(Rgb) * 256); // Записываем палитру в файл
uint8_t pixels[header.width * header.height]; // Создаём массив пикселей
for (int i = 0; i < header.width * header.height; i++) { // Задаём значения пикселей
pixels[i] = i % 256;
}
file.write(reinterpret_cast(&pixels), header.width * header.height); // Записываем пиксели в файл
file.close(); // Закрываем файл
return 0;
}
В приведённом выше примере мы создали файл с расширением .bmp размером 256x256 пикселей и 8 бит на пиксель (то есть 256 цветов). Был задана палитра цветов, а затем были заданы значения для каждого пикселя, записываемые в файл. Результат можно открыть в любом программном продукте для просмотра изображений, поддерживающем формат BMP.