C++:将零写入.bmp文件
C++: Writing zero into .bmp file
我正在尝试读取.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);
相关文章:
- 从 bmp 文件数据创建 MFC CBitmap
- 将 bmp 文件加载到 TSpeedButton 中
- 在 BMP 文件中查找隐藏的消息
- 如何在C++的四叉树中存储 bmp 文件?
- C++:读取.BMP文件时出现问题;文件结束时间早于预期
- 无法加载.bmp文件win32
- 读取BMP文件会归还意外数据
- 在C++中读取bmp文件的宽度和高度
- 在C 中读取并编写BMP文件
- 在BMP文件中保存屏幕截图的设备上下文
- 读取 BMP 文件C++(读取 BMP 标头时出现问题)
- BMP 文件,访问数据
- BMP文件行填充问题
- 我的代码在尝试创建BMP文件时失败
- 在C++、Ubuntu中使用BMP文件
- 当尝试读取和写入bmp文件c++时中止
- 在C++中获取指向bmp文件中dib的指针
- 在 cpp 中从 mysql blob 解析 BMP 文件
- 如何将这个新字符**写入.bmp文件
- 在 C/C++ 中将 64 位 bmp 文件转换为数组