在纯c/c++中编写BMP图像而不使用其他库

在我的算法中,我需要创建一个信息输出。我需要将布尔矩阵写入bmp文件。
它必须是单色图像,如果该元素上的矩阵为真,则像素为白色。
主要问题是bmp头以及如何写入

看看这是否适合你。。。
在这段代码中,我有3个二维数组,称为红色、绿色和蓝色。每个元素的大小[宽度][高度],每个元素对应一个像素-我希望这是有意义的

文件*f;
无符号字符*img=NULL;
int filesize=54+3*w*h//w是图像宽度,h是图像高度,两者都是int
img=(无符号字符*)malloc(3*w*h);
膜组(img,0,3*w*h);
对于(int i=0;i<w;i++)
{
对于(int j=0;j<h;j++)
{
x=i;y=(h-1)-j;
r=红色[i][j]*255;
g=绿色[i][j]*255;
b=蓝色[i][j]*255;
如果(r>255)r=255;
如果(g>255)g=255;
如果(b>255)b=255;
img[(x+y*w)*3+2]=(无符号字符)(r);
img[(x+y*w)*3+1]=(无符号字符)(g);
img[(x+y*w)*3+0]=(无符号字符)(b);
}
}
无符号字符bmpfileheader[14]={'B','M',0,0,0,0,0,0,54,0,0,0,0,0};
无符号字符bmpinfoheader[40]={40,0,0,0,0,0,0,0,0,0,0,1,0,24,0};
无符号字符bmppad[3]={0,0,0};
bmpfileheader[2]=(无符号字符)(文件大小);
bmpfileheader[3]=(无符号字符)(文件大小>>8);
bmpfileheader[4]=(无符号字符)(文件大小>>16);
bmpfileheader[5]=(无符号字符)(文件大小>>24);
bmpinfoheader[4]=(无符号字符)(w);
bmpinfoheader[5]=(无符号字符)(w>>8);
bmpinfoheader[6]=(无符号字符)(w>>16);
bmpinfoheader[7]=(无符号字符)(w>>24);
bmpinfoheader[8]=(无符号字符)(h);
bmpinfoheader[9]=(无符号字符)(h>>8);
bmpinfoheader[10]=(无符号字符)(h>>16);
bmpinfoheader[11]=(无符号字符)(h>>24);
f=fopen(“img.bmp”、“wb”);
fwrite(bmpfileheader,1,14,f);
fwrite(bmpinfoheader,1,40,f);
对于(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);
}
免费(img);
fclose(f);

发表评论