使用 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,从而破坏输出文件。
我正在尝试用 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,从而破坏输出文件。