Bild darstellen



  • Hallo,
    ich wollte mit der lib cximage ein bild darstellen.

    HBITMAP m_bitmap = NULL;
    CxImage image("myfile.png", CXIMAGE_FORMAT_PNG);
    ...
    CDC* hdc = m_picture.GetDC();
    HBITMAP m_bitmap = image.MakeBitmap(hdc->m_hDC);
    
    HBITMAP hOldBmp = m_picture.SetBitmap(m_bitmap);
    if (hOldBmp) DeleteObject(hOldBmp);
    if (hdc->m_hDC) m_picture.ReleaseDC(hdc);
    ...
    if (m_bitmap) DeleteObject(m_bitmap);
    

    Diesen Coder hier hab ich aus der Dokumentation.
    Leider ist CDC nicht deklariert( hab das mal in HDC umbennant)
    und m_picture auch nicht. Würde mich sehr freuen wenn einer weiß, was da falsch ist!
    Danke



  • ich denke in diesem forum wird dir dabei keiner helfen können



  • CDC ist eine MFC-Klasse. Dazu müsstest du also ein MFC-Projekt erstellen, so dass die entsprechenden Header eingebunden sind. Wenn m_picture nicht deklariert wurde, hast du wohl die Deklaration vergessen!



  • danke, ich hab aber ein win32 projekt erstellt.
    Kann ich die nachträglich irgendwie dazutun?
    Oder muss ich ien neues MFC projekt starten?
    Wie deklariere ich den picture?
    Ich weiß ja nicht mal welche Variable das ist, weil sie im beispielcode nicht deklariert ist t.t



  • cximage schrieb:

    danke, ich hab aber ein win32 projekt erstellt.
    Kann ich die nachträglich irgendwie dazutun?
    Oder muss ich ien neues MFC projekt starten?
    Wie deklariere ich den picture?
    Ich weiß ja nicht mal welche Variable das ist, weil sie im beispielcode nicht deklariert ist t.t

    Ja, starte ein MFC-Projekt!

    Woher sollen wir das wissen? Könnte eine PictureBox (also CStatic) sein, die hat ne Methode SetBitmap. Könnte auch was ganz anderes sein...



  • ich kann nicht ein neues Projekt starten dann muss ich mir ne lib suchen die kein MFC braucht. Kennt zufällig wer eine wo man jpgs darstellen kann?
    (will ned direkt winapi)



  • Dem von dir geposteten Code zufolge brauchst du doch gar keine MFC. Sie werden lediglich in dem Beispiel verwendet...

    Mit Nachdenken kommt man da auch ohne MFC-Kenntnisse drauf (da könnten jetzt einige Fehler bei der Anzahl der Funktionsargumente sein, bin nicht mehr so bewandert damit):

    HDC hDC = GetDC(hWnd); // irgendein DC, entweder durch GetDC, CreateDC oder BeginPaint bekommen...bei letzterem EndPaint nicht vergessen!
    
    HBITMAP m_bitmap = NULL;
    CxImage image("myfile.png", CXIMAGE_FORMAT_PNG);
    ...
    // jetzt mach irgendwas mit der Bitmap... z.B. BitBlt 
    
    // und freigeben
    ReleaseDC(hWnd, hDC);
    DeleteObject(m_bitmap);
    


  • habs mal versucht geht aber nicht 😞
    Hab erst das jpg in bmp umgewandelt(das geht) und dann versucht darzustellen:(aufm bildschirm)

    CxImage image;
    		image.Load(Filename.c_str(), CXIMAGE_FORMAT_JPG);
    		if (image.IsValid()){
    		image.Save("image.bmp",CXIMAGE_FORMAT_BMP);
    		CxImage image1("image.bmp", CXIMAGE_FORMAT_BMP);
    		HBITMAP m_bitmap = image1.MakeBitmap(0);
    		HDC hdcMem = CreateCompatibleDC (hDC) ;
    		SelectObject (hDC, m_bitmap) ;
    		BitBlt(hDC, 0, 0, 1000, 1000, hdcMem, 0, 0, SRCCOPY);
    

    geht aber ned 😞



  • omg schrieb:

    geht aber ned 😞

    Sehr präzise Fehlerbeschreibung! 😮



  • sry, es zeigt sich halt einfach kein Bild.



  • hier noch wie ich den handle hole:

    HDC hDC = GetDC(0); // irgendein DC, entweder durch GetDC, CreateDC oder BeginPaint bekommen...bei letzterem EndPaint nicht vergessen!
    		CxImage image;
    		image.Load(Filename.c_str(), CXIMAGE_FORMAT_JPG);
    		if (image.IsValid()){
    		image.Save("image.bmp",CXIMAGE_FORMAT_BMP);
    		CxImage image1("image.bmp", CXIMAGE_FORMAT_BMP);
    		HBITMAP m_bitmap = image1.MakeBitmap(0);
    		HDC hdcMem = CreateCompatibleDC (hDC) ;
    		SelectObject (hDC, m_bitmap) ;
    		BitBlt(hDC, 0, 0, 1000, 1000, hdcMem, 0, 0, SRCCOPY);
    		DeleteDC (hdcMem) ;
    


  • habs jetzt nochma mit der WINAPI probiert!
    Der cximage teil funktioniert nur das darstellen nicht
    irgendwo muss ein fehler drin sein. das program erstellt ein fenster namens Dialog in das es dargestellt werden soll!

    hDC = GetDC(FindWindow(0, "Dialog")); // irgendein DC, entweder durch GetDC, CreateDC oder BeginPaint bekommen...bei letzterem EndPaint nicht vergessen!
    		image.Load(Filename.c_str(), CXIMAGE_FORMAT_JPG);
    		image.Save("image.bmp",CXIMAGE_FORMAT_BMP);
    		hBmp = (HBITMAP)LoadImage(NULL,"image.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    		SelectObject (hdcMem, hBmp) ;
    		BitBlt(hDC, 0, 0, 200, 200, hDC, 0, 0, SRCCOPY);
    		DeleteDC (hdcMem) ;
    		ReleaseDC(0, hDC);
    


  • CreateCompatibleDC()


Anmelden zum Antworten