我正在尝试用c ++读取和写入bmp文件。输出文件已创建但未打开,其大小为257kb,而输入文件为258kb.i首先读取并写入14字节头文件,40字节图像头文件,然后512 * 512像素,这里是我的代码,任何人都可以帮忙
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
ifstream iFile;
char ch;
iFile.open("lena.bmp",ios::binary);
ofstream oFile;
oFile.open("lena3.bmp",ios::binary);
//int headerImageHeader=54;
// int imageHeader=40;
int fs[54];
//int ihs[imageHeader];
int tfs[54];
int pixel[512][512];
if(iFile.is_open() && oFile.is_open())
{
for(int i=0;i<54;i++)
{
iFile.get(ch);
fs[i]=ch;
cout<<fs[i]<<" ";
char p;
p=fs[i];
oFile<<p;
}
for(int w=0;w<512;w++)
{
for(int h=0;h<512;h++)
{
iFile.get(ch);
pixel[w][h]=ch;
//cout<<pixel[w][h]<<;
char pi=pixel[w][h];
oFile<<pi;
}
}
oFile.close();
iFile.close();
}
else cout << "Unable to open file"<<endl;
return 0;
}
答案 0 :(得分:0)
您的代码有多个问题。基本上,BMP文件中的像素存储并不那么简单。这取决于BMP的类型(例如Monochrome Bitmap
,16 Color Bitmap
,256 Color Bitmap
和24-bit Bitmap
等)。
有两个选项可以读取一个Bitmap文件并将其写入另一个Bitmap文件中。
a)从源文件中读取每个字节并写入目标文件
b)理解Bitmap
存储格式并相应地编写代码。
对于选项b)
,可在wiki获得良好来源。
总之,像素阵列存储(大小)的计算是:
PixelArraySize = RowSize x ImageHeight
其中ImageHeight
是像素的图像高度。 RowSize计算如下:
RowSize = [(BitsPerPixelxImageWidth + 31) / 32 ]x4