在 C++ 中使用 BMP 文件,Ubuntu
Woking With BMP File in C++, Ubuntu
我正在尝试使用 g++ 编译器在 linux 中处理 bmp 文件。我正在使用C++语言。
我需要从标准输入加载一个.bmp 文件。例如:
./a.out < test.bmp
所以我需要一个代码来完成这项工作。我认为存储整个 .bmp 文件很好,但我不知道该怎么做。
我试过这段代码,但没有成功:
vector<int> bitmap;
int b;
while ( cin >> b ) {
bitmap.push_back(b);
cout << "!" << endl;
}
那么我应该怎么做呢?
cin >> b
以文本模式读取文件,这不适用于二进制文件。使用这样的东西:
ifstream myFile ("test.bmp", ios::in | ios::binary);
打开文件流,然后
if (!myFile.read (buffer, 100)) {
// do thomething with data in buffer
}
我找到了一个正确的答案。
此代码从标准输入的 *.bmp 文件中读取 bmp_info_header:
char bmpHeader[54];
cin.get(bmpHeader, 54);
cin.get() 中的“54”告诉系统接受输入中最多 54 个数字并忽略其他数字。
现在,例如,如果我们想要查找 *.bmp 大小,我们应该使用此代码:
int filesize = *((int*)(headers + 2));
我正在尝试使用 g++ 编译器在 linux 中处理 bmp 文件。我正在使用C++语言。
我需要从标准输入加载一个.bmp 文件。例如:
./a.out < test.bmp
所以我需要一个代码来完成这项工作。我认为存储整个 .bmp 文件很好,但我不知道该怎么做。
我试过这段代码,但没有成功:
vector<int> bitmap;
int b;
while ( cin >> b ) {
bitmap.push_back(b);
cout << "!" << endl;
}
那么我应该怎么做呢?
cin >> b
以文本模式读取文件,这不适用于二进制文件。使用这样的东西:
ifstream myFile ("test.bmp", ios::in | ios::binary);
打开文件流,然后
if (!myFile.read (buffer, 100)) {
// do thomething with data in buffer
}
我找到了一个正确的答案。 此代码从标准输入的 *.bmp 文件中读取 bmp_info_header:
char bmpHeader[54];
cin.get(bmpHeader, 54);
cin.get() 中的“54”告诉系统接受输入中最多 54 个数字并忽略其他数字。
现在,例如,如果我们想要查找 *.bmp 大小,我们应该使用此代码:
int filesize = *((int*)(headers + 2));