用c ++读写bmp文件

时间:2017-09-30 05:40:31

标签: c++

我正在尝试用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;

}

1 个答案:

答案 0 :(得分:0)

您的代码有多个问题。基本上,BMP文件中的像素存储并不那么简单。这取决于BMP的类型(例如Monochrome Bitmap16 Color Bitmap256 Color Bitmap24-bit Bitmap等)。

有两个选项可以读取一个Bitmap文件并将其写入另一个Bitmap文件中。 a)从源文件中读取每个字节并写入目标文件 b)理解Bitmap存储格式并相应地编写代码。

对于选项b),可在wiki获得良好来源。

总之,像素阵列存储(大小)的计算是:

PixelArraySize = RowSize x ImageHeight

其中ImageHeight是像素的图像高度。 RowSize计算如下:

RowSize = [(BitsPerPixelxImageWidth + 31) / 32 ]x4