C++:将零写入.bmp文件

C++: Writing zero into .bmp file

本文关键字:bmp 文件 C++      更新时间:2023-10-16

我正在尝试读取.bmp文件,修改它的位图值,然后写入另一个.bmp。

据我所知,每个像素的"字符串"都以零结尾,但问题是,当我试图写入零值时,程序会崩溃。

for (j = 0; j < height * mCoeff; j++)
{
    for (k = 0; k < width * mCoeff; k++)
    {
        fwrite(&newBitmap[j][k].red, 1, 1, output);
        fwrite(&newBitmap[j][k].green, 1, 1, output);
        fwrite(&newBitmap[j][k].blue, 1, 1, output);
    }
    fwrite(0, 1, 1, output); //crashes here
}

错误窗口:http://puu.sh/7Cxn1.png

为了使它正确书写,我应该更改什么?

frwite()将指针作为其第一个参数。您正在传递0,它恰好是一个空指针常量,因此您的程序取消引用该空指针并命中断言。

您需要传递一个指针作为第一个参数:

char zero = 0;
fwrite(&zero, 1, 1, output);

fwrite的第一个参数应该是指向缓冲区的const void*指针,该缓冲区保存要写入的数据。您正在传递一个空指针值(0(,该值在fwrite内部被取消引用,从而导致未定义的行为。

你需要一个合适的物体来保持零:

char c = 0;
fwrite(&c, 1, 1, output);

据我所知,每个像素的"字符串"都以零结束

这是不正确的,扫描线是4字节填充的。

末尾应该有0、1、2或3个pad字节,这样scanlinesize % 4 == 0

fwrite(0, 1, 1, output);

您正在写入无效(null(指针。试着把它写成一个字符:

char stringEnd = 0; //char 0 = 
fwrite(&stringEnd, 1, 1, output);