JPG-Bilder in Dialog anzeigen



  • hallo,

    ich weiß, dieses thema gabs schon öfter, aber mit den bereits beschriebenen lösungsvorschlägen komme ich einfach nicht weiter, und die links in den faqs sind schon so alt, dass sie nicht mehr funktionieren...
    wie auch immer, kann mir das nochmal jemang erklären?

    also: ich möchte, wie es bei bmp's mit

    m_cBitmap.SetBitmap((HBITMAP)LoadImage(NULL,"Bitmap.bmp",IMAGE_BITMAP,0,0,
        LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE));
    

    (oder ähnlich) möglich ist eine jpeg-datei in einem Picture-Steuerelement in eimem Dialog anzeigen.

    wie muss ich den code ändern, dass es funktioniert?

    vielen dank schonmal im voraus

    gruß thinux



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-54279.html , da ist ne Klasse, mit der du bsw. mit CPicture pic; pic.Load("C:\Dokumente und Einstellungen\User\Eigene Bilder\pic.jpg"); nen bild laden kannst..



  • danke für den tip 👍

    diesen beitrag muss ich wohl übersehen haben, werds gleich mal ausprobieren...

    gruß thinux



  • hi (D)Evil,

    ich habs nach dem beispiel probiert:

    void CDialog1::OnOK() 
    {
    
    #include "Picture.h"
    #include "afxwin.h"
    
    CPicture m_Picture;
    m_Picture.Load("C:\Test.JPG");
    
    CPaintDC dc(this);
    
    m_Picture.UpdateSizeOnDC(&dc);
    m_Picture.Show(&dc, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0);
    m_Picture.Show(&dc, CRect(0,0,100,100));
    m_Picture.ShowBitmapResource(&dc, IDC_BMP, CPoint(0,0));
    
    }
    

    aber irgendetwas stimmt da noch nicht. ich bekomme immer den "ERROR: Can Not Find The Bitmap Resource" obwohl die Datei "C:\Test.JPG" existiert

    IDC_BMP = die ID von dem Picture Steuerelement, dass ich auf meinen dialog gezeichnet habe, das ist doch richtig so, oder?

    vielen dank
    mfg
    thinux



  • So vielleicht:

    ....
    Picture.Load("C:\\Test.JPG"); 
    ....
    


  • ja, das hab ich auch erst gedacht, funktioniert aber trotzdem nicht.

    der fehler liegt in der zeile:

    m_Picture.ShowBitmapResource(&dc, IDC_BMP, CPoint(0,0));
    

    übrigens das hier funktioniert:

    CPicture m_Picture;
    m_Picture.Load("C:\Test.JPG");
    
    CString S;
    S.Format("Size = %4d\nWidth = %4d\nHeight = %4d\nWeight = %4d\n", m_Picture.m_Weight, m_Picture.m_Width, m_Picture.m_Height, m_Picture.m_Weight);
    AfxMessageBox(S);
    


  • habs auch schon damit probiert:

    CDC* pDC;
    
    m_Picture.UpdateSizeOnDC(pDC);
    m_Picture.Show(pDC, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0);
    m_Picture.Show(pDC, CRect(0,0,100,100));
    m_Picture.ShowBitmapResource(pDC, IDC_BMP, CPoint(0,0));
    

    denn es handelt sich hier um eine SDI, das bild soll jedoch auf einem dialog (seite eines TabCtrl) in einem bestimmten Picture Steuerelement zum Bearbeiten geöffnet werden.

    hat jemand eine idee???
    bin für alle tips dankbar.

    mfg thinux



  • Ich arbeite momentan mit der freien Bibliothek "DevIL". Kannst dir die ja auch mal anschauen



  • IDC_BMP = die ID von dem Picture Steuerelement, dass ich auf meinen dialog gezeichnet habe, das ist doch richtig so, oder?

    Nein... wer lesen kann ist klar im Vorteil 😃

    m_Picture.Load(IDR_TEST, "JPG"); // Load From a Resource - Just Load It (Show Later)
    You Must Include IDR_TEST In Your Resources Under a Custom Name, 4 Example - "JPG"

    Heißt soviel wie: "Du sollst das Bild als Resource Importieren...

    evt. Reicht es, wenn de

    m_Picture.ShowBitmapResource(&dc, IDC_BMP, CPoint(0,0));
    

    weg lässt



  • ...sicher! wer lesen kann... (wer alles lesen kann!)
    --> da gibts auch noch ne 2.zeile

    hab das so versanden:

    entweder:

    m_Picture.Load("Test.JPG"); // Load From a File - Just Load It (Show Later)
    

    zum laden einer datei

    oder:

    m_Picture.Load(IDR_TEST, "JPG"); // Load From a Resource - Just Load It (Show Later)
    //  (U Must Include IDR_TEST In Your Resources Under a Custom Name, 4 Example - "JPG")
    

    zum laden einer resource

    ich möchte aber eine jpg-file direkt anzeigen und bearbeiten ohne über die resourcen gehen zu müssen

    oder wie siehst du das???

    gruß thinux

    (ps. vielen dank für den tip mit "devil", werd mir das bei gelegenheit mal reinziehen)



  • edit: sry war falsch hier^^



  • gibts hier denn wirklich niemand, der weiß wie man ein JPG-Bild in einem Dialog anzeigen und bearbeiten kann ???

    soo helft mir doch, bitte!! 😞

    mfg thinux



  • hmm.. also

    CPicture m_Picture; 
    m_Picture.Load("C:\Test.JPG"); 
    
    CDC* pDC; // Hmm, jetzt hast de nen Pointer auf nen Device Context, der ins nirvaner zeigt... musste schon auf was zeigen lassen(achtung! musst de selber machen! habs so gelassen!
    
    m_Picture.UpdateSizeOnDC(pDC);
    m_Picture.Show(pDC, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0);
    m_Picture.Show(pDC, CRect(0,0,100,100));
    

    Wenn de den Pointer net ins nirvaner Zeigen lässt, sollte es funzen... und pack das ganze in die OnPaint() (hat ein Dlg sowas, oder hieß das da anders?!), da bekommst de direkt nen Device Context Pointer überliefert...



  • erstmal vielen dank für deine hilfe.

    so weit, so gut:

    CPicture m_Picture; 
    m_Picture.Load("C:\Test.JPG"); 
    
    CDC* pDC = GetDC(); //oder --> CClientDC dc(this);
    
    m_Picture.UpdateSizeOnDC(pDC);
    m_Picture.Show(pDC, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0);
    

    das klappt auch wunderbar.

    --> aber wie muss ich das mit dem DC machen wenn ich will, dass das Bild in einem Rahmen (Picture Steuerelement) angezeigt wird?

    zum beispiel: mein Steuerelement heißt "IDB_BMP"

    mfg & bestem dank
    thinux



  • ok, ich habs! hier noch mal für alle die auch mal vor dem Prob. stehn:

    CPicture m_Picture; 
    m_Picture.Load("C:\Test.JPG"); 
    
    CDC* pDC = m_cPic.GetDC(); //m_cPic => ID vom Picture Steuerelement
    
    m_Picture.UpdateSizeOnDC(pDC);
    m_Picture.Show(pDC, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0);
    

Anmelden zum Antworten