Wie lädt man GDI PNG Image aus resource?



  • Hallo,

    ich will ein GDI Image aus einem PNG File laden, das ich fix in eine Resource
    reingeladen habe. Ich habe mich umgesehen und enteckt, das es für Resourcen
    unter C# anscheinend sowas gibt:

    Image m_Image( L"pack://application:,,,/Resources/Bild.png" )
    oder
    m_Image.FromFile( L"pack://application:,,,/Resources/Bild.png" )
    

    (alles hinter dem Image member ist ein Ladestring der Filelocation)

    Normal würde es so aussehen:

    Image m_Image( L"c:\\Bild.png" )
    

    Geht / gibts das auch mit c++ irgendwie?

    Wenn ich es richtig verstanden habe, könnte man mit solchen Pfaden alles in
    Resourcen packen und als Pfad übergeben ??

    Wie heisst der genaue Pfad unter MFC Resourcen, wenn ich es unter "PNG" in der .rc eingebunden habe?

    Grüße
    TheNoName


  • Mod



  • Hab ich gelesen.
    Leider funktioniert der Code der Zusatzklasse nicht während der Klasseninitialisierung:

    CTestDialog::CTestDialog(  LPCTSTR lpszFile, UINT nID, CWnd* pParent /*=NULL*/)
    		: CDialog( nID, pParent)
    	{
    		// geht nicht : m_Image.FromResource(NULL,L"IDR_PNG1");
    		HRSRC hResource = FindResource(GetModuleHandle(NULL),"IDD_CLUSTER","Dialog");
    		if (hResource)
    		{
    			DWORD imageSize = ::SizeofResource(NULL, hResource);
    			if (!imageSize)
    			{
    				const void* pResourceData = ::LockResource(::LoadResource(NULL, hResource));
    				if (pResourceData)
    				{
    					m_hBuffer  = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
    					if (m_hBuffer)
    					{
    						void* pBuffer = ::GlobalLock(m_hBuffer);
    						if (pBuffer)
    						{
    							CopyMemory(pBuffer, pResourceData, imageSize);
    
    							IStream* pStream = NULL;
    							if (::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream) == S_OK)
    							{
    								m_Image.FromStream(pStream);
    								pStream->Release();
    
    							}
    							::GlobalUnlock(m_hBuffer);
    						}
    						::GlobalFree(m_hBuffer);
    						m_hBuffer = NULL;
    					}
    				}
    			}
    		}
    	}
    

    Dort ist FindResource immer NULL.
    Auch mit FindResourceEx und Languageinfos.


  • Mod

    Wenn IDD_CLUSTER eine ID ist musst Du MAKEINTRESOURCE(IDD_CLUSTER) verwenden!

    Bist Du auch sicher, das der Ressourcen Typ stimmt?



  • Ok, habe ich verstanden.
    Vergiss das mit dem Init Code, der Wrapper funktioniert so wie er ist, man sollte nicht alles nachbasteln!


Anmelden zum Antworten