首页 > 解决方案 > Image::GetFrameCount 将 Image::LastError 设置为 win32error c++ gdi+

问题描述

此函数会在一段时间后更改图像的活动帧但是当我尝试获取维度的帧数时,它将 image->lasterror 设置为 Win32Error

有什么办法可以解决吗?(Windows 10、Visual Studio 2017 社区)

void PlayImageAnim(Gdiplus::Image*&image, int delay,bool Looped)
{
    using namespace Gdiplus;
    if (Looped == true)
    {
        while (true)
        {
            UINT dcount = 0;
            GUID *dimensionsIDs;
            dcount = image->GetFrameDimensionsCount();
            dimensionsIDs = new GUID[dcount];
            UINT frame_count = image->GetFrameCount(&dimensionsIDs[0]);
            int y = 0;
            GUID pageGUID = FrameDimensionTime;
            int size = image->GetPropertyItemSize(PropertyTagFrameDelay);
            Gdiplus::PropertyItem*pr_item = (Gdiplus::PropertyItem*)malloc(size);


            for (UINT i = 0; i <= frame_count; i++)
            {
                /*graphics.DrawImage(image, image_rect);*/
                /*long delay = ((long*)pr_item->value)[i] * 10;*/
                image->SelectActiveFrame(&pageGUID, i);
                std::this_thread::sleep_for(std::chrono::milliseconds(delay));
            }
            image->SelectActiveFrame(&pageGUID, 0);
        }
    }
    else
    {
        UINT dcount = 0;
        GUID *dimensionsIDs;
        dcount = image->GetFrameDimensionsCount();
        dimensionsIDs = new GUID[dcount];
        UINT frame_count = image->GetFrameCount(&dimensionsIDs[0]);

        GUID pageGUID = FrameDimensionTime;
        int size = image->GetPropertyItemSize(PropertyTagFrameDelay);
        Gdiplus::PropertyItem*pr_item = (Gdiplus::PropertyItem*)malloc(size);


        for (UINT i = 0; i <= frame_count; i++)
        {
            image->SelectActiveFrame(&pageGUID, i);
            std::this_thread::sleep_for(std::chrono::milliseconds(delay));
        }
        image->SelectActiveFrame(&pageGUID, 0);
    }
}

它必须与项目其他部分的类似部分

标签: c++winapigdi+

解决方案


推荐阅读