在我的算法中,我需要创建一个信息输出。我需要将布尔矩阵写入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);