3

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

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

然而,意想不到的事情发生了:

好照片

变成:

坏图片

我不明白为什么会这样。

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

当我在 ubuntu 中编译并运行我的程序时,图片出来的效果很好。

当我将一个大文本文件(比图像大)写入 .txt 时,文件输出正常。

只有 Windows 上的 jpeg 会失败。我尝试的原始图像是来自 PGP 密钥包的图像,其中一半人的头脑清晰,另一半则混乱。

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

怎么了?我在 Windows 7 上的 Code::Blocks 中使用 ming2 4.7.2。Windows 只是疯了吗?

4

1 回答 1

6

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

std::ofstream f("image.jpeg", std::ios::out | std::ios::binary);
//                                            ^^^^^^^^^^^^^^^^
于 2013-07-24T06:19:07.297 回答