【发布时间】:2017-10-01 07:47:53
【问题描述】:
我正在尝试查找 bmp 文件的文件大小、文件头大小宽度和高度。我研究过bmp文件的格式和文件中的字节排列。 当我尝试此代码时,它显示不同文件的宽度和高度错误。 到目前为止,我已经尝试了三张图片。这张图片的测量结果正确。
这个没有:
我不明白我哪里出错了,但是位深度显示了所有三个图像的正确值。
这是我的代码:
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
int main() {
ifstream inputfile("bmp.bmp",ios::binary);
char c; int imageheader[1024];
double filesize=0; int width=0; int height=0;int bitCount = 0;
for(int i=0; i<1024; i++) {
inputfile.get(c); imageheader[i]=int(c);
}
filesize=filesize+(imageheader[2])*pow(2,0)+(imageheader[3])*pow(2,8)+(imageheader[4])*pow(2,16)+(imageheader[5])*pow(2,24);
cout<<endl<<endl<<"File Size: "<<(filesize/1024)<<" Kilo Bytes"<<endl;
width=width+(imageheader[18])*pow(2,0)+(imageheader[19])*pow(2,8)+(imageheader[20])*pow(2,16)+(imageheader[21])*pow(2,24);
cout<<endl<<"Width: "<<endl<<(width)<<endl;
height=height+(imageheader[22])*pow(2,0)+(imageheader[23])*pow(2,8)+(imageheader[24])*pow(2,16)+(imageheader[25])*pow(2,24);
cout<<endl<<"Height: "<<endl<<(height)<<endl;
bitCount=bitCount+(imageheader[28])*pow(2,0)+(imageheader[29])*pow(2,8);
cout<<endl<<"Bit Depth: "<<endl<<(bitCount)<<endl;
}
【问题讨论】:
-
通常在英文句号或逗号后加一个空格。此外,句子中的第一个单词应使用大写字母。最后,格式化您的代码,使其可读,我们不会浪费时间尝试破译它。
-
很抱歉给您带来不便
-
代码建议。不要使用
double、pow函数或任何浮点来表示本质上是整数的事物 -
@USERRR5 -- 不使用
pow不仅仅是代码建议,错误甚至可能来自使用它。 See here -
@USERRR5 - 我为您提供了一个解决方案,但它可能无法解释为什么您没有获得 BMP 的预期值。但是,您发布的图像是 PNG 文件。发送一个指向该史努比图像的原始 BMP 文件的链接,如果下面的代码不能解决问题,我会看看是什么问题。
标签: c++