0

我使用DirectXTK 中的 CreateWICTextureFromFile()来加载动画 GIF 纹理。

ID3D11Resource* Resource;
ID3D11ShaderResourceView* View;
hr = CreateWICTextureFromFile(d3dDevice, L"sample.gif",
    &Resource, &View);

然后我将它显示在一个ImageButton亲爱的 IMGUI 库上:

ImGui::ImageButton((void*)View, ImVec2(width, height));

但它只显示静止图像(GIF 文件的第一帧)。

我想我必须分别给它每一帧的纹理。但我不知道怎么做。你能给我一个提示吗?

4

1 回答 1

2

DirectX Tool Kit中的CreateWICTextureFromFile功能(又名WICTextureLoader模块中的“轻量级”版本)仅加载单个 2D 纹理,而不是像动画 GIF 或 TIFF 这样的多帧图像。

DirectXTex函数LoadFromWICFile可以加载帧图像,如果你给它一个标志。因为该库专注于 DirectX 资源,所以它将全部调整大小以匹配第一个图像大小。WIC_FLAGS_ALL_FRAMES

也就是说,WIC 将返回给您的是一堆原始帧。您已经从 WIC 查询元数据以实际获取动画信息,并且重建有点复杂。我在DirectXTex texassemble工具中有一个简单的实现,您可以在此处参考。我专注于将动画 GIF 转换为“翻书”风格的 2D 纹理阵列,该阵列要大得多。

我引用的示例可以在GitHub上找到

于 2021-09-01T02:27:09.887 回答