读写图像数据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(); }

读写图像数据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(); },c++,image,file,C++,Image,File,但我想图像不是这样的。我必须安装lib或类似的东西才能让它工作吗?或者我可以“仅仅”使用包含的库吗?我知道我不是真正的C++专家,所以请告诉我,如果我完全错了。 我希望有人能并且愿意帮助我!提前谢谢 顺便说一句,图像是.png格式。您可以使用std流,但在打开流时使用ios::binary参数。它有很好的文档记录,在互联网上有几个例子您显然在使用MS Windows:Windows通过对行分隔符的不同处理来区分“文本”和“二进制”文件。对于二进制文件,您不希望在读取时将\n\r转换为\n。要防止

但我想图像不是这样的。我必须安装lib或类似的东西才能让它工作吗?或者我可以“仅仅”使用包含的库吗?我知道我不是真正的C++专家,所以请告诉我,如果我完全错了。 我希望有人能并且愿意帮助我!提前谢谢


顺便说一句,图像是.png格式。

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

您显然在使用MS Windows:Windows通过对行分隔符的不同处理来区分“文本”和“二进制”文件。对于二进制文件,您不希望在读取时将
\n\r
转换为
\n
。要防止这种情况,请在打开文件时使用ios::binary模式,如所示

顺便说一句,您不必在windows下的路径中使用
\\
。只需使用前斜杠:

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

这甚至可以追溯到二战时使用MS-DOS的时候。

如果目标只是复制一个文件,那么可能比手动复制更好

#include <Windows.h>
// ...
BOOL const copySuccess = CopyFile("source.png", "dest.png", failIfExists);
// TODO: handle errors.
#包括
// ...
BOOL const copycsuccess=CopyFile(“source.png”、“dest.png”、failIfExists);
//TODO:处理错误。
如果不选择使用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();
#包括
// ...
std::ifstream-fin(“source.png”,std::ios::binary);
std::ofstreamfout(“dest.png”,std::ios::binary);
//TODO:处理错误。

fout*呵欠*
但我想图像不是这样的。
为什么?所有文件都是字节。耶!感谢您提供的关于使用/而不是\\的提示,它正在工作!:)