如何修复 bfSize 字段中的标题

Posted

技术标签:

【中文标题】如何修复 bfSize 字段中的标题【英文标题】:How to fix header in bfSize field 【发布时间】:2019-08-10 19:38:05 【问题描述】:

我在哈佛 CS50 的第 4 周。我目前正在调整大小 - 因此将现有 BMP 放大特定因子(1 到 100 之间)。

我的代码可以准确地编译和调整图像大小,但是在运行 CS50 的 Check50 时,它会在 bfSize 字段中显示意外错误,例如头字段 bfSize 中的预期为 0xae,而不是 0x5a。

我对编程完全陌生,所以请原谅我提出任何愚蠢的问题。

这是我的代码的链接:https://raw.githubusercontent.com/me50/NinaIMW/cs50/problems/2019/x/resize/less/resize.c?token=ALYWHW7TNZRPFYTB73JSUCK5LBMXC

这是我测试代码时 Check50 返回的内容:

:) resize.c and bmp.h exist.
:) resize.c compiles.
:) doesn't resize small.bmp when n is 1
:( resizes small.bmp correctly when n is 2
    expected 0xae, not 0x5a in header field bfSize
:( resizes small.bmp correctly when n is 3
    expected 0x132, not 0x5a in header field bfSize
:( resizes small.bmp correctly when n is 4
    expected 0x1e6, not 0x5a in header field bfSize
:( resizes small.bmp correctly when n is 5
    expected 0x306, not 0x5a in header field bfSize
:( resizes large.bmp correctly when n is 2
    expected 0x6f6, not 0x1e6 in header field bfSize
:( resizes smiley.bmp correctly when n is 2
    expected 0x336, not 0xf6 in header field bfSize
:( resizes smiley.bmp correctly when n is 3
    expected 0x6f6, not 0xf6 in header field bfSize```

【问题讨论】:

Your link 不工作... 道歉。没有意识到你必须分享原始的,它现在应该可以工作了。 raw.githubusercontent.com/me50/NinaIMW/cs50/problems/2019/x/… 【参考方案1】:

我没有 small.bmp(所以我无法尝试)但我建议更改:

newBf.bfSize = bi.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

newBf.bfSize = newBi.biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

您仍在使用旧的bi 而不是newBi 来计算newBf.bfSize

【讨论】:

天哪,是的!非常感谢您发现这一点。现在效果好多了。当 n 为 2,3 或 4 时,它仍然会出错。 :( resizes small.bmp correctly when n is 2 expected 0xae, not 0xb4 in header field bfSize :( resizes small.bmp correctly when n is 3 expected 0x132, not 0x144 in header field bfSize :( resizes small.bmp correctly when n is 4 expected 0x1e6, not 0x20a in header field bfSize 你认为这可能是一个填充问题吗? Small 是 3 x 3,所以每条扫描线有 9 个字节,所以不是 4 的倍数,而笑脸是 8 x 8,所以每条扫描线有 24 个字节。 这一行在计算正确的newBI.biWidth之前使用,看起来是错误的:int newPadding = (4 - (newBi.biWidth * sizeof(RGBTRIPLE)) % 4) % 4;你应该在计算newBI.biWidth之后放置这一行(但在使用newPadding之前)。 非常感谢。它现在工作得很好!非常感谢! @NinaIMW 如果您对我的回答感到满意,您可以投票并接受吗?谢谢 嘿,我还没有足够的声望点,因为我对堆栈溢出还很陌生。不过,我已经多次击中赞成箭头。堆栈溢出说他们将这些考虑在内。 :)

以上是关于如何修复 bfSize 字段中的标题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React-Redux 应用程序中修复 431 请求标头字段太大

如何修复 C# MOngoDB 中的日期匹配错误

修复了持久标题并滚动到重点输入字段

如何在 panGesture 之后修复新的 textField 位置?

如何修复阻止注册用户登录的护照本地身份验证错误

使用前向声明时如何修复“字段类型不完整”错误