读取和写入图像数据的c++



我刚刚开始学习c++,我正在编写一个程序,该程序应该从硬盘上抓取图像,然后将其保存为另一个名称。原始图像仍应保留。我已经让它和文本文件一起工作了,因为我可以这样做:

ifstream fin("C:\test.txt");
ofstream fout("C:\new.txt");
char ch;
while(!fin.eof())
{
    fin.get(ch);
    fout.put(ch);
}
fin.close();
fout.close();
}

但我想图像不是这样的。我必须安装一个lib或类似的东西来让它工作吗?或者我可以"仅仅"使用包含的库吗?我知道我不是真正的c++专家,所以如果我完全错了,请告诉我。

我希望有人可以并且愿意帮助我!提前感谢!

图片格式为。png。

您可以使用std流,但在打开流时使用ios::binary参数。它有很好的文档,网上有几个例子

您显然正在使用MS Windows: Windows通过不同的行分隔符处理来区分"文本"one_answers"二进制"文件。对于二进制文件,您不希望它在读取时将nr转换为n。为了防止它,在打开文件时使用ios::binary模式,就像@Emil告诉你的那样。

BTW,你不必在windows下的路径中使用\。只需使用正斜杠:

ifstream fin("C:/test.txt");

这甚至在第二次世界大战中使用MS-DOS时也有效。

如果目标只是复制文件,那么CopyFile可能是比手动操作更好的选择。

#include <Windows.h>
// ...
BOOL const copySuccess = CopyFile("source.png", "dest.png", failIfExists);
// TODO: handle errors.

如果使用Windows API不是一个选项,那么像你所做的那样一次复制一个字符是非常低效的方法。正如其他人所指出的,您需要以二进制形式打开文件,以避免I/O混淆行结尾。一种比一次一个字符更简单、更有效的方法是:

#include <fstream>
// ...
std::ifstream fin("source.png", std::ios::binary);
std::ofstream fout("dest.png", std::ios::binary);
// TODO: handle errors.
fout << fin.rdbuf();

相关内容

  • 没有找到相关文章

最新更新