Bitmap aus Ressource in die Konsole



  • Hallo,

    Bitmaps sind AFAIK in der Console nicht darstellbar. Dazu brauchst du schon den Grafikmodus oder ein Fenster.

    Für den Grafikmodus findest du hier und in der Assembler-FAQ Beiträge.

    MFG winexec*



  • Hm? Ich hatte doch schon längst nen Bitmap in meiner Konsole dargestellt!

    Das ist nicht das Problem..

    Ich krieg es aber nicht hin es aus einer Ressource zu laden und darzustellen.



  • Hallo,

    Nicht ganz mitbekommen:

    Guck dir einmal das an:

    http://www.codeproject.com/bitmap/cximage.asp

    MFG winexec*



  • Sind gute Tipps, aber die verwirren mich nur noch mehr.

    Was ich wollte ist das, was Airdamn gemacht hat.

    Also einfach nur meinen im ersten Beitrag geposteten Code so verändern, dass es geht.

    Scheint auch zu funktionieren, aber vielleicht mach ich was im Aufruf falsch bzw geb ich die falschen Parameter an..

    Also wär nett, wenn mir einer die Funktion LoadBmp2Console() so verändern könnte,
    dass es geht und mir dann noch sagt, wie ich es richtig aufrufe.

    Wenn Airdamn's Beispiel stimmte, brauch ich nur noch wissen welchen Parameter ich durch char *szBitmap ersetzen muss und wie dann der Funktionsaufruf aussieht.



  • hast Du denn, wie ich geschrieben hab, die Zeile mit der anderen ersetzt?
    Eigentlich solltest Du die 1:1 übernehmen können, wenn Deine Bitmap-Ressource RES_LAKE heißt. Kannst auch debuggen und gucken welchen Wert hBitmap bekommt nach dem laden...

    EDIT: Ach ja, jpgs sollten auch gehen...ich glaub ich der einer FAQ wird ein JPG in ein HBITMAP geladen mithilfe von IPicture...



  • Airdamn schrieb:

    hast Du denn, wie ich geschrieben hab, die Zeile mit der anderen ersetzt?

    Jop, ausser dass ich RES_LAKE in Anführungszeichen setzen musste.
    Hat auch keine Probleme dabei gegeben, aber wie rufe ich die Funktion jetzt auf?

    Hab es so versucht:

    LoadBmp2Console("RES_LAKE",270,10);
    

    Lässt sich ohne Fehlermeldungen komplilieren, aber es ist kein Bild zu sehen 😕

    resource.rc

    RES_LAKE    BITMAP  "devil.bmp"
    

    [die füg ich natürlich dem projekt hinzu und eine devil.bmp existiert auch im selben verzeichnis]

    main.cpp

    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    int LoadBmp2Console(char *,int,int);
    
    int main()
    {
        LoadBmp2Console("RES_LAKE",270,10);
        getchar();
    }
    
    int LoadBmp2Console(char *szBitmap, int PosX, int PosY)
    {
        HBITMAP hBitmap = (HBITMAP)LoadImage(GetModuleHandle( NULL ),MAKEINTRESOURCE("RES_LAKE"), IMAGE_BITMAP,0,0,0);
        if (!hBitmap) return 1;
    
        BITMAP bmp;
        GetObject(hBitmap,sizeof(bmp),&bmp);
    
        HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
        if (!hwnd) return 2;
    
        HDC hDC = GetDC(hwnd);
        if (!hDC) return 3;
    
        HDC hBitmapDC = CreateCompatibleDC(hDC);
        if (!hBitmapDC) return 4;
    
        SelectObject(hBitmapDC,hBitmap);
    
        BitBlt(hDC,PosX,PosY,381,128,hBitmapDC,0,0,SRCCOPY);
    
        DeleteObject(hBitmap);
        ReleaseDC(hwnd,hBitmapDC);
        ReleaseDC(hwnd,hDC);
        return 0;
    }
    


  • aso klar...
    so sollte es aussehen:

    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    int LoadBmp2Console(UINT,int,int);
    
    int main()
    {
        LoadBmp2Console(RES_LAKE,270,10);
        getchar();
    }
    
    int LoadBmp2Console(UINT nID, int PosX, int PosY)
    {
        HBITMAP hBitmap = (HBITMAP)LoadImage(GetModuleHandle( NULL ),MAKEINTRESOURCE(nID), IMAGE_BITMAP,0,0,0);
        if (!hBitmap) return 1;
    ...
    


  • Dann kommt vom Compiler die Fehlermeldung:

    Compiler schrieb:

    [C++ Fehler] main.cpp(9): E2451 Undefiniertes Symbol 'RES_LAKE'

    Ich hab's doch in der Ressource-Datei definiert 😕

    Oder was muss ich da jetzt noch machen?

    Jedenfalls danke schonmal für deine Hilfe! 👍



  • Füg eine

    ressource.h

    #define RES_LAKE 100
    

    deinem Projekt hinzu und Inkludiere sie in main.cpp und in ressource.rc.

    Greetz, Swordfish



  • 👍 👍 👍

    Jetzt hab ich's hinbekommen, danke für die Hilfe! 😉


Anmelden zum Antworten