【发布时间】:2020-07-17 14:31:25
【问题描述】:
我有一个 IWICBitmapSource 的 std::vector 并试图创建一个动画 gif:
void SaveGif()
{
CComPtr<IWICBitmapEncoder> wicBitmapEncoder;
auto hr =
fact->CreateEncoder(
GUID_ContainerFormatGif,
nullptr, // No preferred codec vendor.
&wicBitmapEncoder
);
VectorStream stream;
hr =
wicBitmapEncoder->Initialize(
&stream,
WICBitmapEncoderNoCache
);
for (auto& gox : Gifs)
{
CComPtr<IWICBitmapFrameEncode> wicFrameEncode;
hr =
wicBitmapEncoder->CreateNewFrame(
&wicFrameEncode,
0
);
hr =
wicFrameEncode->Initialize(bag2);
auto g2 = GUID_WICPixelFormat24bppRGB;
wicFrameEncode->SetPixelFormat(&g2);
WICRect wr = {};
UINT wi, he;
gox.second->GetSize(&wi,&he);
wr.Width = wi;
wr.Height = he;
hr = wicFrameEncode->WriteSource(gox.second, &wr);
hr = wicFrameEncode->Commit();
}
// save stream to gif file
}
所有功能都成功,最终文件正在动画,但没有循环。它在最后一帧停止。
如何让它无限循环?
【问题讨论】:
-
“但是没有动画,它只是显示一个静态图像。” - 您使用什么工具、应用程序或程序来验证这一点?
-
Windows照片查看器,我也上传到了facebook,我也在Photoshop里试过,甚至打不开。
-
@IInspectable 现在它正在工作(而不是缓存 Wics,我将它们放在创建中)知道如何制作 gif 循环吗? (编辑了 q)
-
据我所知,循环不是动画 GIF 核心规范的一部分,但我不知道 WIC 是否支持这种非标准扩展。
-
您必须在 WIC 中为 GIF vurdalakov.net/misc/gif/netscape-looping-application-extension 编写应用程序扩展,这意味着您要编写元数据,正好与此相反:github.com/pauldotknopf/WindowsSDK7-Samples/blob/master/…