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:
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! }