C ++ ofstream输出到图像文件在Windows上写入不同的数据

时间:2013-07-24 06:14:55

标签: c++ image windows-7 ofstream

我做了一件简单的事情:将存储为字符串的图像文件的数据写入包含该字符串的图像文件中。

std::ofstream f("image.jpeg");
f << image_data; // image_data was created using python and copied over, in hex and turned back into ascii

然而,出乎意料的是:

Good Picture

变为:

Bad Picture

我无法理解为什么会这样。

  

当我使用python2.7从原始图片中获取数据并写入时   它到一个新文件,它工作正常。

     

当我在ubuntu中编译并运行我的程序时,图片出来了   细

     

当我将大文本文件(大于图像)写入.txt时,   文件很好。

     

只有Windows上的jpegs失败了。我试过的原始图像是   来自PGP密钥包的图像,其中一半是   一个人头脑清醒,另一半搞砸了。

编译后的程序并没有弄乱所有数据,因为正如我上面所说,显示了一些原始图片。此外,图像大小相同,因此至少保留了jpeg格式。

发生了什么事?我在Windows 7的Code :: Blocks中使用ming2 4.7.2.Windows刚刚疯了吗?

1 个答案:

答案 0 :(得分:6)

您必须以二进制模式打开文件:

std::ofstream f("image.jpeg", std::ios::out | std::ios::binary);
//                                            ^^^^^^^^^^^^^^^^