GDI+在循环中只保存一次图像

GDI+ saving image only once in the loop

本文关键字:一次 图像 保存 循环 GDI+      更新时间:2023-10-16

我是这个库的新手。我想把所有的gif文件都转换成tif。以下是我的代码。它只保存了第一次,然后抛出状态=2(无效参数)。请帮我

    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 successfullyn");
            else
                printf("Failure: stat = %dn", stat);
            delete image;
        }
    } while (FindNextFileW(hFind, &ffd) != 0);
    GdiplusShutdown(gdiplusToken);
    return 0;
}

std::string::replace的第二个参数是要替换的字符数,而不是字符串的长度。因此,您可能会出现缓冲区溢出,这会扰乱其他内存(例如,encoderClsid)。