使用 ofstream 创建一个位图文件有一个奇怪的输出

create a bitmap file with ofstream have a strange output

我正在尝试用 C++ 打开一个位图文件,更改它,然后创建另一个位图文件。问题是当我尝试使用 ofstream 输出位图文件时,即使不更改文件的任何字节,它也有一个奇怪的输出。

#include <fstream>
using namespace std;

int main ()
{
    ifstream fin ("6.bmp", std::ios::binary);
    ofstream fout ("output.bmp");
    for (int i = 0; i < 1920*1080*3 + 54; i++)
        fout.put(fin.get());
}

1920 * 1080 是图片尺寸,*3 代表红、绿、蓝。我知道位图文件有 54 个字节 header,所以我认为 6.bmp;

正好有 1920*1080*3 + 54 个字节

当输入为:input

然后我得到 this 输出。

(我调整了两张图片的大小以便上传,但它们都是 1920*1080)

我在 windows 8.1 中用 g++ 编译了这段代码。而且我不想使用位图库。

使用 Windows,fout 也必须以二进制模式打开,否则 0x0d 字节将在每个 0x0a 字节之前 auto-inserted,从而破坏输出文件。