编辑
//出于工作目的,编辑了其中的一些代码。
我不太确定我理解为什么需要将 8bpp 图像拆分为单色图像,但是如果将 save_bmp 函数更改为以下内容,它至少会生成“有效”的图像
void save_bmp(char *fname, BITMAPFILEHEADER *header, BITMAPINFOHEADER *info,
std::bitset<N> *image)
{
FILE *file_ptr = fopen(fname, "wb");
fwrite(header, sizeof(BITMAPFILEHEADER), 1, file_ptr);
fwrite(info, sizeof(BITMAPINFOHEADER), 1, file_ptr);
fwrite(&create_palette(0,0,0), sizeof(RGBQUAD), 1, file_ptr);
fwrite(&create_palette(255,255,255), sizeof(RGBQUAD), 1, file_ptr);
//fwrite(image, N, 1, file_ptr);
unsigned char * b = pack(image);
fwrite(b,N/8,1,file_ptr);
delete[] b;
fclose(file_ptr);
}
std:bitset 是一个对象而不是缓冲区。由于您已经有一个打包函数将位集打包到缓冲区中,因此使用它而不是尝试将对象写入文件似乎很自然。