2016-07-27 85 views
0

Ich habe eine Klasse geschrieben, die eine animierte GIF-Datei mit Direct2D anzeigen kann.Visual Studio 2012 - Hinzufügen von animiertem GIF als Ressource für die Verwendung mit Direct2d

Im Moment bin ich Zugriff auf das gewünschte GIF angezeigt wird via es FilePath wie:

WCHAR szFileName[MAX_PATH] = "C:\\Users\\xxx\\Desktop\\xxx.gif"; 

m_pIWICFactory->CreateDecoderFromFilename( //My IWICImagingFactory 
     szFileName,       
     nullptr,   
     GENERIC_READ, 
     WICDecodeMetadataCacheOnLoad, 
     &m_pDecoder);      //My IWICBitmapDecoder 

Ich brauche diesen Teil zu ändern, so dass die gewünschte GIF aus den Ressourcen von meinem Projekt geladen werden.

Was ich tat/versuchte so weit:

1)
- ich direkt auf mein Projekt geklickt haben, klickten hinzufügen "Resource"
- Im Popup habe ich ausgewählt "Import" und als Ressourcentyp definierte I „GIF“

, die in einer nicht-erstellbar Projekt Ursache Folge von Error RC2135 in C++ project due to UTF-8 encoding of RC file
Zusätzlich sie „zerstört“ meine GIF-Datei. Das Öffnen des GIF in Notepad hat gezeigt, dass es von GIF89a zu SM6 (.bmp) während dieses Prozesses

2)
umgewandelt wurde - ich auf My Project rechts geklickt, klickte hinzufügen "exsisting Item" und ausgewählte meine GIF
- Dann habe ich versucht, das geben zu der RC-Datei wie IDR_MYGIF GIF

, die in „Fehler RC2135 Ergebnisse hinzuzufügen: Datei nicht gefunden: \ resources \ xxx "\ resources \ xxx.gif.". .gif "

Also im Grunde muß ich wissen, wie ich das richtig das GIF hinzufügen kann, um die Ressourcen und wie ich werde in der Lage sein, es für die IWICBitmapDecoder im Kodex für den Zugriff auf

Vielen Dank für jede Hilfe

+0

Hinweis: In "2)" habe ich verschiedene Pfade ausprobiert, die zum selben Fehler führen –

+0

CreateDecoder * Von Filename * macht genau das, was es verspricht. Verwenden Sie stattdessen CreateDecoderFromStream(). CreateStreamOnHGlobal() ist eine einfache Möglichkeit, den benötigten IStream zu erhalten. –

+0

@HansPassant Wenn Sie eine kurze Beschreibung geben würden, wie das GIF zu den Ressourcen hinzugefügt werden kann und wie es dann genutzt werden soll, könnte ich es als Antwort markieren ... –

Antwort

0

I schließlich wurde es ... hier arbeiten, ist, was Sie zu tun haben:

1) Fügen Sie Ihre Ressource für das Projekt

Rechts Klicken Sie auf das Projekt - Hinzufügen - Vorhandenes Element - Wählen Sie Ihre Datei

2) Bearbeiten Sie Ihre Datei resource.h

Definieren Sie eine Kennung für Ihre Ressource, zum Beispiel: #define IDR_GIF 107

3) bearbeiten Sie Ihre RC-Datei

IDR_GIF RCDATA "C: \ Benutzer \ xxx \ Desktop \ xxx.gif“

4) Definieren Sie einen Stream-Zeiger

Ich habe ein privates Mitglied in meiner Klasse, zB: LPSTREAM pStream;

5) umfassen Shlwapi.dll

Hinzufügen #include <Shlwapi.h>

6) Link Shlwapi.lib

Projekt - "Ihr Projekt" Eigenschaften - Konfigurationseigenschaften - Linker - Eingang - Zusätzliche Abhängigkeiten - Bearbeiten - Hinzufügen Shlwapi.lib

7) Verwenden Sie die Ressource

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); 
+0

'pStream' sollte entweder' IStream * 'sein, oder irgendein intelligenter Zeigertyp. Da wir den Code nach 'CreateDecoderFromStream' nicht sehen können, gibt es keine Möglichkeit, sicher zu wissen, ob das Stream-Objekt ordnungsgemäß freigegeben wurde (durch Aufrufen von' Release'). – IInspectable