【问题标题】:Finding the width and height of a bmp image using bitwise operators使用位运算符查找 bmp 图像的宽度和高度
【发布时间】:2014-10-10 00:50:27
【问题描述】:

您好,我正在尝试仅使用位运算符来查找 BMP 图像的宽度和高度。 这是我迄今为止尝试过的。

for (i = 0; i <= 3; i++)
    {
        width = file_data[i + 18] | width << 8;
        height = file_data[i + 22] | height << 8;
    }

这是我所知道的。宽度在字节 19、20、21 和 22 中找到。字节 19 是低位字节,然后是 20,然后是 21,字节 22 是高位字节。

高度在字节 23、24、25 和 26 中找到。字节 23 是低位字节,然后是 24,然后是 25,字节 26 是高位字节。

宽度和高度是整数。

更新-------- 我当前使用的文件的宽度和高度是 298 x 432 当我使用

 for (i = 0; i <= 3; i++)
    {
        width = file_data[21 - i] | width << 8;
        height = file_data[25 - i] | height << 8;
    }

当我运行程序时,我得到 298 by -80

【问题讨论】:

  • 你为什么要这样做?将数据复制到 BITMAPINFO 结构中并直接访问字段。
  • 我想练习一下位运算符。

标签: c++ image bmp


【解决方案1】:

尽管您的描述是正确的,但您的代码是倒退的。 file_data[18] 是位图宽度的最低有效字节,但您将其作为最高有效字节放在 width 变量中。 height 也是如此。要么反转循环以倒计时,要么将索引更改为减法而不是加法。

【讨论】:

  • 我试过了 width = file_data[21 - i] |宽度
  • @john:widthheightbinary_data 的类型是什么?更好的是,在您的帖子中,请提供一个完整的、可编译的示例来演示该问题。
  • 对不起,我正在考虑并键入它的 file_data 文件中的数据。宽度和高度是整数。
  • @john:好吧,不过,我需要看一个完整的、可编译的示例来演示这个问题。
  • 好吧,这有点奇怪。我得到了其他 bmp 文件的正确输出,但是对于这个我现在没有得到正确的高度。宽度现在很好,它只是高度。
猜你喜欢
  • 2011-06-12
  • 2019-03-26
  • 1970-01-01
  • 2016-08-09
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多