gpt4 book ai didi

c - fwrite 失败取决于先前的 fwrite

转载 作者:行者123 更新时间:2023-11-30 17:26:01 25 4
gpt4 key购买 nike

我遇到一些 fwrite 问题,它以我不明白的方式失败。

在这段代码中,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;

我仔细检查了代码中的每个细节:

  • bmpdata1 和 bmpdata2 包含有效的 bmp 位图数据,如果单独使用,它们都会生成正确的图像。
  • bmpheader 和 bmpdib 是从有效的 bmp 文件中读取的数据结构,在我的代码之前它们不会被修改。
  • 所有文件均以二进制模式打开,“rb”用于输入,“wb”用于输出。
  • bmpdata1 和 bmpdata2 是同一图像的副本,因此它们的字节大小相同。

我的代码的目标是编写一个图像及其修改后的副本,以获得比原始图像高两倍的最终图像。原始位图是 570 x 363 x 24 位 bmp 图像。

我做错了什么?

非常感谢任何帮助,谢谢。

最佳答案

这解决了问题。感谢艺术。

  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”操作中写入,每个图像的数据大小为生成的位图数据大小的一半。

关于c - fwrite 失败取决于先前的 fwrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com