Я пытаюсь создать растровое изображение, которое показывает траекторию полета пули.Создание растрового изображения в C
int drawBitmap(int height, int width, Point* curve, char* bitmap_name)
{
int image_size = width * height * 3;
int padding = width - (width % 4);
struct _BitmapFileheader_ BMFH;
struct _BitmapInfoHeader_ BMIH;
BMFH.type_[1] = 'B';
BMFH.type_[2] = 'M';
BMFH.file_size_ = 54 + height * padding;
BMFH.reserved_1_ = 0;
BMFH.reserved_2_ = 0;
BMFH.offset_ = 54;
BMIH.header_size_ = 40;
BMIH.width_ = width;
BMIH.height_ = height;
BMIH.colour_planes_ = 1;
BMIH.bit_per_pixel_ = 24;
BMIH.compression_ = 0;
BMIH.image_size_ = image_size + height * padding;
BMIH.x_pixels_per_meter_ = 2835;
BMIH.y_pixels_per_meter_ = 2835;
BMIH.colours_used_ = 0;
BMIH.important_colours_ = 0;
writeBitmap(BMFH, BMIH, curve, bitmap_name);
}
void* writeBitmap(struct _BitmapFileheader_ file_header,
struct _BitmapInfoHeader_ file_infoheader, void* pixel_data, char* file_name)
{
FILE* image = fopen(file_name, "w");
fwrite((void*)&file_header, 1, sizeof(file_header), image);
fwrite((void*)&file_infoheader, 1, sizeof(file_infoheader), image);
fwrite((void*)pixel_data, 1, sizeof(pixel_data), image);
fclose(image);
return 0;
}
Кривая - это возвращаемое значение функции, которая вычисляет путь. Он указывает на массив точек, который представляет собой структуру координат x и y. Я действительно не знаю, как правильно «поместить» данные в растровое изображение. Недавно я начал программировать C, и сейчас я совсем потерялся.
Для начала, файл .bmp использует малое форматирование конца. Так, например, первые два символа 'B' и 'M' фактически находятся в порядке «M», «B». Каждое поле следует за тем же самым маленьким форматированием. Таким образом, оператор присваивания в коде может или не может привести к правильному порядку байтов поля, в зависимости от базового оборудования. – user3629249
при использовании структуры, в которой разные поля имеют различный размер, будут добавлены байты заполнения между определенными полями, если необходимо, для выравнивания следующего поля с соответствующей границей адреса. Это дополнение (не имеет никакого отношения к заполнению строки изображения, чтобы каждая строка была кратной 4) приведет к недопустимому файлу .bmp. Для достижения правильного порядка байтов и добавления дополнений к компилятору правильным методом является определение структур как групп байтов (char) и размещение каждого байта отдельно. – user3629249
@ user3629249 'BMFH.type_' выглядит как массив, поэтому идентификатор« BM » байты * являются * правильным путем. Но индексы массива ошибочны. Должен быть 'BMFH.type_ [0] = 'B'; BMFH.type_ [1] = «M»; « –