Mysterium: Bilder in der Konsole



  • ...



  • 😮 😮 😮 😮 😮 😮



  • Der ist ja mal nicht von schlechten Eltern, werde ich bei Gelgenheit testen 😮

    Deine PlatformSDK-Version und IDE?

    MfG SideWinder



  • ...



  • kann mal jemand master of x86 loben?



  • masterofx32 schrieb:

    http://www.mmsources.de/pub/ConTest.rar

    Nach einer kurzen Zeit flackert bei mir alles.



  • Meinst du wirklich flackert? Guck doch in den Sourcecode da werden zufällige Pixel gesetzt. Sieht fast aus wie der Schnee im Fernsehen. 🤡



  • Ich wollte da was Bewegtes zur Demonstration reinbringen aber für was Anspruchsvolleres hatte ich keine Lust. 😃



  • Warum hast du das so gut gemacht? 🙂



  • ich hab hier nocheinmal ein code der
    dieses "übermalen" macht 🙂

    #include <windows.h>                 // Ganz klar, dass wir die brauchen.
    #include <stdio.h>
    #include <conio.h>                   // getch()...
    #pragma comment(lib, "gdi32.lib")
    
    int ShowBitmap(char *szBmpFile, int iX, int iY); // Prototyp unserer Bild-Anzeigefunktion.
    
    void main(void) 
    {   
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBeliebige Taste... "); 
        if(ShowBitmap("D:\\lol.bmp", 10, 10) == -1) printf("Ein Fehler ist aufgetreten.");
        getch();
    } 
    
    int ShowBitmap(char *szBmpFile, int iX, int iY) // Mit X bzw. Y können Sie das Bild
                                                    // in verschiedenen Bereichen des
                                                    // Konsolenfensters erscheinen
                                                    // lassen.
    {
        HDC hDC;   // Auch den DC (Device Control) wo das Bild hineingezeichnet werden
        HDC hDC2;  // Einen DC noch für das Bild, das wir laden.
        // soll, brauchen wir!
        HWND hWnd; // Um das Bild in der Konsole anzuzeigen, brauchen wir das Handle
        // (HWND) vin dem laufenen Konsolenfenster. In hWnd holen wir's.
    
        // Wir laden ein Bitmap mit einem HBITMAP Handle wie gehabt von der Festplatte
        // (spezieller Pfad) mit LR_LOADFROMFILE.
        HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, szBmpFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 
        if(hBitmap == NULL) return -1; // Bei falschem Handle, -1 zurückgeben!
        // Jetzt Infos über's Bild holen!
        BITMAP bitmap; 
        GetObject(hBitmap, sizeof(bitmap), &bitmap); // Wir brauchen ein paar Infos über das Bild
                                               // in der Datei.
        // So. Holen wir das Konsolenfenster-Handle!
        hWnd = FindWindow("ConsoleWindowClass", NULL);
        if(hWnd == NULL) return -1; // Und wieder... Wenn Handle NULL, dann gib' -1 zurück!
        hDC = GetDC(hWnd);   
        if(hDC == 0) return -1; // Selbsterklärend! ;) 
    
        hDC2 = CreateCompatibleDC(hDC);  // Einen für unsere Grafik kompatiblen
                                         // DC erstellen!
        if(hDC2 == NULL) return -1;   // *gääähn*. :-) 
    
        SelectObject(hDC2, hBitmap); // So. Hier wird auf hDC2 unser Bitmap gesetzt!
    
        // Mit BitBlt hauen wir dann also das Bild (das sich im DC befindet) in den DC
        // des Konsolenfensters. Das ist im Prinzip alles, was wir in diesem Programm
        // tun.
        BitBlt(hDC, iX, iY, bitmap.bmHeight, bitmap.bmWidth, hDC2, 0, 0, SRCCOPY);  
    
        DeleteObject(hBitmap);  // Bitte
        ReleaseDC(hWnd, hDC);    // keine
        ReleaseDC(hWnd, hDC2);  // Speicherleaks!
        return 0; // Alles glatt gelaufen... 0 zurückgeben!
    }
    

Anmelden zum Antworten