bmp oder jpg in Windows Fenster anzeigen - wie?



  • Hallo,
    Ich habe schon mehrere Tutorials und Foren durchsucht, aber nichts passendes Gefunden.
    Meistens war das Problem, dass es sich um irgendwelche Quellcode-fetzen handelte...

    Was ich wissen will, ist für Profis sicher nicht allzu schwer:

    Wie zeige ich eine Bmp oder jpg in einem Windows Fenster an?

    Freue mich auf Antwort, wenn sie nicht nur ein Fetzen Quellcode ist 😉

    MfG

    Möchtegern-Geek



  • Das ist eigentlich nicht sehr schwer:

    hbitmap = LoadImage (NULL,TEXT("Hier kommt der Pfad zum Bild hin, z.b C:\\programme\\bilder\\DasBild.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
      hdc_ram = CreateCompatibleDC(NULL); 
      SelectObject (hdc_ram, hbitmap); 
      BitBlt       (hdc,50,50,100,100,hdc_ram,0,0,SRCCOPY); 
      DeleteDC     (hdc_ram); 
      DeleteObject (hbitmap);
    

    Zuerst packst du das bild ein einen objekt, anschließend läßt du es einfach zeichnen. Und man sollte natürlich nicht vergessen das objekt wieder zu schließen.

    EDIT: Achja, dad funktioniert auch nur bei bitmaps, soweit ich weiß^^



  • Hi, lad dir mal dieses Projekt runter:

    http://support.microsoft.com/kb/218972

    Hier wird veranschaulicht wie man GIF-, JPG-, BMP-, ICO-, EMF- und WMF-Dateien läd und anzeigt.

    MfG WilMen :xmas1:



  • ...oder GDI+ nehmen, damit kannst du jpg, png etc. sowohl öffnen als auch speichern:
    Using Images, Bitmaps, and Metafiles



  • hallo,
    Danke erstmal für die Hilfe ich habe die mdsn mal durchforstet und habe ungefähr das von Showball gefunden,
    aber:
    @ Showball:
    an welcher stelle des Fensters muss ich das denn Einfügen? case WM_Paint? case WM_???
    und:
    Mein Compiler (DevC++) behauptet immer, hbitmap noch nie gehört zu haben. muss ich noch einen Header einfügen?
    oder muss ich das hier noch definieren?

    .
    .
    .
    { 
    HDC hdc; 
    PAINTSTRUCT ps; 
    //hier hbitmap definieren????
    
    switch (message) 
    { 
    case WM_PAINT: 
        hdc = BeginPaint (hwnd, &ps); 
            TextOut (hdc, 20, 20, "Blalalala", 20);
    .
    .
    .
    

    MfG

    Möchtegern-Geek



  • hBitmap ist nur der Name für ein HBITMAP handle

    HBITMAP hBitmap;
    

    dann müsste es funktionieren



  • geht leider nicht, denn jetzt gibt er diesen Fehler an:

    53  invalid conversion from `void*' to `HBITMAP__*'
    

    Ich glaube immernoch, dass mir ein header fehlt...

    MfG

    Möchtgern-Geek



  • switch (message)
    {
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hDC = BeginPaint (hWnd, &ps);
            // double buffering + bitmap blitten
            HDC hDCMem = CreateCompatibleDC(hDC);
            HGDIOBJ hOldBitmap = SelectObject (hDCMem, hBitmap);
            BitBlt(hDC, 0, 0, /*width*/100, /*height*/100, hDCMem, 0, 0, SRCCOPY);
            SelectObject(hDCMem, hOldBitmap);
            DeleteDC(hDCMem);
    
            TextOut (hDC, 10, 10, "Bitmap #001", 12);
    
            EndPaint(hWnd, &ps);
        } break;
    
    HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, TEXT("C:\\Programme\\MyApp\\MyData.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    

    müsstest du nur vorher setzen 😉 Notfalls auch per static in deiner WindowProc ...


Anmelden zum Antworten