首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据以前的fwrite,fwrite失败。

根据以前的fwrite,fwrite失败。
EN

Stack Overflow用户
提问于 2014-11-13 11:40:35
回答 1查看 98关注 0票数 0

我有一个问题,一些失败的方式,我不明白。

在这段代码中,fwrite失败并给出tmp = 0。

代码语言:javascript
复制
  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;

但是,如果我评论一行代码,一切都很好:

代码语言:javascript
复制
      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图像。

我做错了什么?

任何帮助都是非常感谢的,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-11-13 12:00:57

这解决了问题。多亏了艺术。

代码语言:javascript
复制
  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‘操作中,每个操作的结果是位图数据大小的一半。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26908086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档