-1

编辑

//出于工作目的,编辑了其中的一些代码。

4

1 回答 1

7

我不太确定我理解为什么需要将 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 是一个对象而不是缓冲区。由于您已经有一个打包函数将位集打包到缓冲区中,因此使用它而不是尝试将对象写入文件似乎很自然。

于 2012-08-20T04:46:15.217 回答