我正在尝试将Bitmap保存到我加载它的同一个文件中。但是我无法这样做。我知道.save()函数的文档说"不要将图像保存到用于构建图像的相同流中。这样做可能会损坏流#34;并认为这是我的问题的原因。 例如,如果我加载图像" a.jpg"我无法将修改后的文件保存回" a.jpg",我必须更改文件名。
这是我加载图片的代码:
std::string fullPath = imgFolderPath + "\\" + imageFileNames[i];
std::wstring wstr(fullPath.begin(), fullPath.end());
Bitmap* bitmap = new Bitmap(wstr.c_str());
我保存图片的代码是:
bitmap->Save(wstr.c_str(), &clsid, NULL);
当文件名不同时,这可以正常工作。有没有办法可以写到同一张图片?我宁愿"更新"图像比完全创建新图像。
答案 0 :(得分:0)
只要您将图片存储到缓冲区中,为什么不删除图像ex。' system(" rm foo.png")'然后写?
答案 1 :(得分:0)
难道你不能只关闭现有的Bitmap流,然后打开一个新的Bitmap流来写相同的文件名吗?然后应该覆盖原始图像。
答案 2 :(得分:0)
我从jlpilkin在GDI +文档的Community Additions部分看到的建议建议不要直接从文件创建Bitmap。而是将文件读入内存缓冲区,创建内存流,然后从内存流中创建位图。创建位图后,您可以释放内存流和内存缓冲区。现在你有一个不打开原始文件的Bitmap。
然后我将修改后的位图保存为临时名称,并使用ReplaceFile以原子方式将其移动到原始文件名,保留原始文件的属性。