C++ C++;:当使用位集数组(正确!)代替位集变量时,程序似乎不起作用

C++ C++;:当使用位集数组(正确!)代替位集变量时,程序似乎不起作用,c++,debugging,bitset,C++,Debugging,Bitset,编辑 //为了工作的目的编辑了一些代码 我不太明白为什么需要将8bpp图像拆分为单色图像,但是如果将save_bmp函数更改为以下内容,它至少会生成“有效”的图像 void save\u bmp(字符*fname,位图文件头*头,位图文件头*信息, std::位集*图像) { 文件*FILE_ptr=fopen(fname,“wb”); fwrite(头,sizeof(BITMAPFILEHEADER),1,file_ptr); fwrite(info,sizeof(BitMapInfo头文件

编辑


//为了工作的目的编辑了一些代码

我不太明白为什么需要将8bpp图像拆分为单色图像,但是如果将save_bmp函数更改为以下内容,它至少会生成“有效”的图像

void save\u bmp(字符*fname,位图文件头*头,位图文件头*信息,
std::位集*图像)
{ 
文件*FILE_ptr=fopen(fname,“wb”);
fwrite(头,sizeof(BITMAPFILEHEADER),1,file_ptr);
fwrite(info,sizeof(BitMapInfo头文件),1,file_ptr);
fwrite(&create_调色板(0,0,0),sizeof(RGBQUAD),1,file_ptr);
fwrite(&create_调色板(255255255),sizeof(RGBQUAD),1,file_ptr);
//fwrite(图像,N,1,文件_ptr);
无符号字符*b=块(图像);
编写(b,N/8,1,文件ptr);
删除[]b;
fclose(文件检索);
} 

std:位集是一个对象而不是缓冲区。因为您已经有了一个将位集打包到缓冲区的pack函数,所以使用它而不是试图将对象写入文件似乎是很自然的事情。

-1:对于一个好的SO问题来说,这是太多的代码了。将代码减少到显示问题的最小值。这真的是产生此问题的最小代码量吗?似乎有点臃肿..发布悬赏以防止问题被关闭远不如学习使用调试器和编写最小的测试用例那么有成效。重点是。感谢您的输入,我将再看一段时间,尽量减少错误的再现。@Louis93:您能提供一个链接到一个图像,该图像将通过
这个程序仅适用于8bpp图像
消息吗?
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); 
}