GDI +在循环中只保存一次图像
问题描述:
我是这个库的新手。 我想将所有gif文件转换为tif。以下是我的代码。它只是第一次保存,在它抛出状态= 2(无效参数)之后。 请帮我GDI +在循环中只保存一次图像
do {
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
wstring str(ffd.cFileName);
str = gifDir1 + str;
const wchar_t *filename = str.c_str();
Image *image = new Image(ffd.cFileName);
wstring str2(ffd.cFileName);
wstring::size_type found = str2.find(L".gif");
str2.replace(found, str2.length(), L".tif");
str2 = tifDir + str2;
const wchar_t *dstfilename = str2.c_str();
stat = image->Save(dstfilename, &encoderClsid, NULL);
if (stat == Ok)
printf("File was saved successfully\n");
else
printf("Failure: stat = %d\n", stat);
delete image;
}
} while (FindNextFileW(hFind, &ffd) != 0);
GdiplusShutdown(gdiplusToken);
return 0;
}
答
到std::string::replace
第二个参数是替换的字符数,不是字符串的长度。因此,你可能有一个缓冲区溢出而弄乱了其他内存(例如,像encoderClsid
)。