*.JPG bilder anzeigen



  • Jetzt hab ich hinbekommen, das ich BMPs anzeigen lassen kann, aber irgendwie ist das sehr unpraktisch, weil BMPs etwas unhandlich sind.

    Nun hab ich mal versucht aus dem ganzen Kauderwelsch im Netz und diversen Büchern mich da ranzuarbeiten, aber irgendwie will er nicht so wie ich will.

    Ich kann ja mal Posten, was ich da so hab:

    void CJPGAnzeigenDlg::OnBnClickedLoad()
    {
    	CString bitmap;
    	CPaintDC dc(this);
    
    	//CString m_file;
    	CFileDialog m_file(true,NULL,NULL,NULL,NULL,NULL, NULL);
    	if(m_file.DoModal() == IDOK)
    	{
    		bitmap = m_file.GetPathName();
    		m_bild.Destroy();
    		m_bild.Load(bitmap);
    	}
    }
    
    void CJPGAnzeigenDlg::ShowPicture(void)
    {
    	CPaintDC jpg(this);
    	m_bild.Draw(jpg,0,0,100,100,0,0,100,100);
    }
    

    bei der ShowPicture-Funktion bin ich mir nicht wirklich sicher ob das überhaupt gehen würde.
    Die

    #include <atlimage.h>
    

    hab ich natürlich eingebunden.
    Wenn einer ne gescheite seite weiß (außer MSDN 👎 ) oder nen vorschlag / Rat hat, dann her damit. Den könnte ich dringens gebrauchen.

    THX



  • Na hi,
    also meines Wissens will er bei der draw-Funktion nicht einen Zeiger auf den DC an sich, sondern exakt das Output Device.
    Versuche es doch mal mit:

    image.Draw(pDC->m_hDC,...)
    

    bzw. jpg anstelle von pDC.
    Da ich das ganze direkt in der OnDraw mache, weiß ich nicht genau, ob es mit dem CPaintDC funktioniert, aber ein Versuch ist es ja so erstmal wert 🙂



  • nee geht nicht 😞 son mist. Warum kann das nicht so einfach wie mit den BMPs gehen



  • Bei mir tut es da inzwischen 😉
    Welcher Datentyp ist bei Dir denn m_bild??
    Hast Du schon mal versucht, ein anderes Format (nicht jpg) zu laden? Sollte ja auch gehen; stimmt denn der vom FileDialog zurückgegebene Dateiname?

    Was genau passiert denn? Gar nichts oder Fehlermeldung?



  • Also mein m_bild ist nen CImage
    und egal was ich laden will, es lässt sich nicht laden..
    Eine Fehlermeldung kommt nicht. Er zeigt halt nichts an und ansonsten passiert halt nichts. Woran das liegt weiß ich net. Wie macht ihr das denn?



  • Na wenn keine Fehlermeldung kommt, ist doch erstmal ganz gut 😉

    Aber ich würde an Deiner Stelle noch eine Kontrolle einbauen:

    HRESULT hResult=image.Load(filename);
    if(FAILED(hResult)) MessageBox("Bild (" + filename + ") konnte nicht geladen werden!","Fehler",MB_OK | MB_ICONSTOP);
    

    Da kannst Du Dir dann sicher sein, daß zumindest das Laden funktioniert.

    Falls das nämlich einwandfrei klappt, kann es ja nur noch am anzeigen liegen.
    Und da kann ich leider nicht so viel sagen, da ich nicht mit dem CPaintDC gearbeitet habe. Ich mache das ja direkt in der OnDraw und da ins pDC hinein, da ich das nur fürs Drucken brauche.
    Eventuell siehst Du ja auch nur nichts vom Bild: Was für einen MapMode verwendest Du denn??



  • hmm...vielleicht geh ich an die Sache auch falsch ran...
    Naja auf jedenfall wenn ich die Fehlerabfrage einbauen gehts net, denn anscheinend ist mein VS zu blöd eine einfache MessageBox zu kompilieren..."konvertierung von const char[..] nach LPTCSTR nicht möglich bla bla"...scheiß teil.


  • Mod

    Ich vermute eher, dass Dein Code in Unicdoe compiliert wird und deshalb das ganze besser so aussehen sollte.

    MessageBox(_T("Bild (") + filename + _T(") konnte nicht geladen werden!"),_T("Fehler"),MB_OK | MB_ICONSTOP);
    

    Je nachdem wo Du diesen Code einbaust existiert MessageBox als member auch nicht.
    Besser ist es IMHO immer AfxMessageBox zu verwenden.


Log in to reply