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

时间:2015-02-24 18:06:31

标签: c++ gdi+

我是这个图书馆的新手。 我想将所有的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 successfully\n");
            else
                printf("Failure: stat = %d\n", stat);

            delete image;

        }

    } while (FindNextFileW(hFind, &ffd) != 0);

    GdiplusShutdown(gdiplusToken);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

std::string::replace的第二个参数是要替换的字符数,而不是字符串的长度。结果,你可能有一个缓冲区溢出,这会弄乱其他内存(例如,像encoderClsid)。