我遇到了一些我不理解的失败的问题。
在这段代码中,fwrite都失败并给出tmp = 0.
if ((file = fopen(filenameout, "wb")) != NULL)
{
bmpheader->filesz += bmpdib->bmp_bytesz;
bmpdib->bmp_bytesz *= 2;
bmpdib->height *= 2;
tmp = fwrite(bmpheader, sizeof(bmp_header_t), 1, file);
tmp = fwrite(bmpdib, sizeof(bmp_dib_t), 1, file);
tmp = fwrite(bmpdata1, bmpdib->bmp_bytesz, 1, file);
tmp = fwrite(bmpdata2, bmpdib->bmp_bytesz, 1, file);
fclose(file);
}
else
return 1;
但如果我评论一行代码就行了一切:
if ((file = fopen(filenameout, "wb")) != NULL)
{
bmpheader->filesz += bmpdib->bmp_bytesz;
// bmpdib->bmp_bytesz *= 2;
bmpdib->height *= 2;
tmp = fwrite(bmpheader, sizeof(bmp_header_t), 1, file);
tmp = fwrite(bmpdib, sizeof(bmp_dib_t), 1, file);
tmp = fwrite(bmpdata1, bmpdib->bmp_bytesz, 1, file);
tmp = fwrite(bmpdata2, bmpdib->bmp_bytesz, 1, file);
fclose(file);
}
else
return 1;
我仔细检查了我的代码中的每一个细节:
我的代码的目标是编写一个图像加上它的修改后的副本,以获得比原始图像高两倍的最终图像。原始位图是570 x 363 x 24位bmp图像。
我做错了什么?
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
这解决了这个问题。感谢Art。
if ((file = fopen(filenameout, "wb")) != NULL)
{
bmpheader->filesz += bmpdib->bmp_bytesz;
bmpdib->bmp_bytesz *= 2;
bmpdib->height *= 2;
tmp = fwrite(bmpheader, sizeof(bmp_header_t), 1, file);
tmp = fwrite(bmpdib, sizeof(bmp_dib_t), 1, file);
tmp = fwrite(bmpdata1, bmpdib->bmp_bytesz / 2, 1, file);
tmp = fwrite(bmpdata2, bmpdib->bmp_bytesz / 2, 1, file);
fclose(file);
}
else
return 1;
我错误地使用更新的位图数据大小来写入最终图像的每个部分。生成的图像有两倍的高度,因为它由两个堆叠的图像组成,每个图像在一个单独的“fwrite”操作中写入,每个操作的结果位图数据大小都是一半。