Visual Studio 2012 - 如何添加动画 GIF 作为资源以用于 Direct2d
Visual Studio 2012 - How to add animated GIF as Resource for usage with Direct2d
我写了一个 class 可以用 Direct2D 显示动画 GIF 文件。
现在我正在访问所需的 GIF 以通过它的文件路径显示:
WCHAR szFileName[MAX_PATH] = "C:\Users\xxx\Desktop\xxx.gif";
m_pIWICFactory->CreateDecoderFromFilename( //My IWICImagingFactory
szFileName,
nullptr,
GENERIC_READ,
WICDecodeMetadataCacheOnLoad,
&m_pDecoder); //My IWICBitmapDecoder
我需要更改这部分,以便从我的项目的资源中加载所需的 GIF。
我 did/tried 到目前为止:
1)
- 我右键单击我的项目,单击添加 "Resource"
- 在弹出窗口中,我选择了 "Import" 并且我将资源类型定义为 "GIF"
Which resulted in a non-buildable project cause of Error RC2135 in C++ project due to UTF-8 encoding of RC file
Additionally it "destroyed" my GIF file. Opening the GIF in Notepad showed that it got converted from GIF89a to BM6(.bmp) during this process
2)
- 我右键单击我的项目,单击添加 "Exsisting Item" 并选择我的 GIF
- 然后我尝试将 give 添加到 .rc 文件中,例如 IDR_MYGIF GIF ".\resources\xxx.gif"
Which results in "error RC2135: file not found: .\resources\xxx.gif
"
所以基本上我需要知道如何将 GIF 正确添加到资源以及如何在 IWICBitmapDecoder
的代码中访问它
感谢您的帮助
我终于让它工作了...这是你必须做的:
1) 将您的资源添加到项目
Right Click on the Project - Add - Existing Item - Select your file
2) 编辑您的 resource.h 文件
Define a identifier for your resource, e.g.: #define IDR_GIF 107
3) 编辑您的 .rc 文件
IDR_GIF RCDATA "C:\Users\xxx\Desktop\xxx.gif"
4) 定义流指针
I created a private member in my class, e.g.: LPSTREAM pStream;
5) 包括 Shlwapi.dll
Add #include <Shlwapi.h>
6) link Shlwapi.lib
Project - "Your Project" Properties - Configuration Properties - Linker - Input - Additional Dependencies - Edit - Add Shlwapi.lib
7) 使用资源
HRSRC myResource = ::FindResource(NULL, MAKEINTRESOURCE(IDR_GIF), RT_RCDATA);
HGLOBAL myResourceData = ::LoadResource(NULL, myResource);
unsigned int myResourceSize = ::SizeofResource(NULL, myResource);
pStream = SHCreateMemStream((LPBYTE)LockResource(myResourceData), myResourceSize);
m_pIWICFactory->CreateDecoderFromStream(
pStream,
nullptr,
WICDecodeMetadataCacheOnLoad,
&m_pDecoder);
我写了一个 class 可以用 Direct2D 显示动画 GIF 文件。
现在我正在访问所需的 GIF 以通过它的文件路径显示:
WCHAR szFileName[MAX_PATH] = "C:\Users\xxx\Desktop\xxx.gif";
m_pIWICFactory->CreateDecoderFromFilename( //My IWICImagingFactory
szFileName,
nullptr,
GENERIC_READ,
WICDecodeMetadataCacheOnLoad,
&m_pDecoder); //My IWICBitmapDecoder
我需要更改这部分,以便从我的项目的资源中加载所需的 GIF。
我 did/tried 到目前为止:
1)
- 我右键单击我的项目,单击添加 "Resource"
- 在弹出窗口中,我选择了 "Import" 并且我将资源类型定义为 "GIF"
Which resulted in a non-buildable project cause of Error RC2135 in C++ project due to UTF-8 encoding of RC file
Additionally it "destroyed" my GIF file. Opening the GIF in Notepad showed that it got converted from GIF89a to BM6(.bmp) during this process
2)
- 我右键单击我的项目,单击添加 "Exsisting Item" 并选择我的 GIF
- 然后我尝试将 give 添加到 .rc 文件中,例如 IDR_MYGIF GIF ".\resources\xxx.gif"
Which results in "error RC2135: file not found: .\resources\xxx.gif "
所以基本上我需要知道如何将 GIF 正确添加到资源以及如何在 IWICBitmapDecoder
的代码中访问它感谢您的帮助
我终于让它工作了...这是你必须做的:
1) 将您的资源添加到项目
Right Click on the Project - Add - Existing Item - Select your file
2) 编辑您的 resource.h 文件
Define a identifier for your resource, e.g.: #define IDR_GIF 107
3) 编辑您的 .rc 文件
IDR_GIF RCDATA "C:\Users\xxx\Desktop\xxx.gif"
4) 定义流指针
I created a private member in my class, e.g.:
LPSTREAM pStream;
5) 包括 Shlwapi.dll
Add
#include <Shlwapi.h>
6) link Shlwapi.lib
Project - "Your Project" Properties - Configuration Properties - Linker - Input - Additional Dependencies - Edit - Add Shlwapi.lib
7) 使用资源
HRSRC myResource = ::FindResource(NULL, MAKEINTRESOURCE(IDR_GIF), RT_RCDATA);
HGLOBAL myResourceData = ::LoadResource(NULL, myResource);
unsigned int myResourceSize = ::SizeofResource(NULL, myResource);
pStream = SHCreateMemStream((LPBYTE)LockResource(myResourceData), myResourceSize);
m_pIWICFactory->CreateDecoderFromStream(
pStream,
nullptr,
WICDecodeMetadataCacheOnLoad,
&m_pDecoder);