В моем алгоритме я должен создать вывод информации. Я должен для записи булевой матрицы в bmp файле. Это должно быть изображение monocromic, где пиксель является белым, если матрица на таком элементе верна. Основной проблемой является bmp заголовок и как записать это.
Без использования какой-либо другой библиотеки вы можете посмотреть формат файла BMP . Я реализовал это в прошлом, и это можно сделать без особых усилий.
Структуры растрового файла
Каждый файл растрового изображения содержит заголовок файла растрового изображения , заголовок информации о растровом изображении, таблицу цветов и массив байтов. что определяет биты растрового изображения. Файл имеет следующую форму:
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
RGBQUAD aColors [];
BYTE aBitmapBits [];
... подробнее см. Формат файла
Обратите внимание, что строки сохраняются снизу вверх, а не наоборот.
Кроме того, строки развертки должны иметь длину в байтах, кратную четырем, для обеспечения этого следует вставить байты заполнения в конце строк.
Посмотрим, сработает ли это для вас ... В этом коде , У меня было 3 двумерных массива, называемых красным, зеленым и синим. Каждый был размером [ширина] [высота], и каждый элемент соответствовал пикселю - надеюсь, это имеет смысл!
FILE *f;
unsigned char *img = NULL;
int filesize = 54 + 3*w*h; //w is your image width, h is image height, both int
img = (unsigned char *)malloc(3*w*h);
memset(img,0,3*w*h);
for(int i=0; i<w; i++)
{
for(int j=0; j<h; j++)
{
x=i; y=(h-1)-j;
r = red[i][j]*255;
g = green[i][j]*255;
b = blue[i][j]*255;
if (r > 255) r=255;
if (g > 255) g=255;
if (b > 255) b=255;
img[(x+y*w)*3+2] = (unsigned char)(r);
img[(x+y*w)*3+1] = (unsigned char)(g);
img[(x+y*w)*3+0] = (unsigned char)(b);
}
}
unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0};
unsigned char bmpinfoheader[40] = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0};
unsigned char bmppad[3] = {0,0,0};
bmpfileheader[ 2] = (unsigned char)(filesize );
bmpfileheader[ 3] = (unsigned char)(filesize>> 8);
bmpfileheader[ 4] = (unsigned char)(filesize>>16);
bmpfileheader[ 5] = (unsigned char)(filesize>>24);
bmpinfoheader[ 4] = (unsigned char)( w );
bmpinfoheader[ 5] = (unsigned char)( w>> 8);
bmpinfoheader[ 6] = (unsigned char)( w>>16);
bmpinfoheader[ 7] = (unsigned char)( w>>24);
bmpinfoheader[ 8] = (unsigned char)( h );
bmpinfoheader[ 9] = (unsigned char)( h>> 8);
bmpinfoheader[10] = (unsigned char)( h>>16);
bmpinfoheader[11] = (unsigned char)( h>>24);
f = fopen("img.bmp","wb");
fwrite(bmpfileheader,1,14,f);
fwrite(bmpinfoheader,1,40,f);
for(int i=0; i<h; i++)
{
fwrite(img+(w*(h-i-1)*3),3,w,f);
fwrite(bmppad,1,(4-(w*3)%4)%4,f);
}
free(img);
fclose(f);