C++ Bitmap problem

godofkills

Lt. Commander
Registriert
Dez. 2009
Beiträge
1.997
Guten Abend zusammen,
ihr seit meine letze Rettung.
Folgende Situation:

Da mir heut langweilig war, dachte ich mir, dass ich mal eine Runde programmiere.
Nach einiger Zeit war ich dabei ein kleines Jump 'n' Run Game zu machen.
Da biete es sich ja an, ganz primitiv, mit Bitmaps zu arbeiten und dadurch Grafiken darstellen.
Ich habe jeweils für die Wolken, Hintergrund und Boden eine Klasse.
Diesen Klassen wird die unten genannte Methode vererbt.

In der main steht folgender Methoden Aufruf:" h1.load_hintergrund();"
Und in der Methode des Objekt hintergrund steht dann:" load("farbe/hellblau.bmp",x,y);"

Aber sobald ich das aktuelle Konsolen Bild zum 4.-6. mal erneuer will(Hintergrund, den Boden und die Wolke) hört die Funktion auf die Bitmaps zu laden.
D.h er lädt den Hintergrund und dann die nächsten Bitmaps nicht mehr.



HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,szBitmap, IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
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,bmp.bmHeight,bmp.bmWidth,hBitmapDC,0,0,SRCCOPY);

DeleteObject(hBitmap);
ReleaseDC(hwnd,hBitmapDC);
ReleaseDC(hwnd,hDC);



Und zwar genau diese Abfrage wird gültig.
if (!hBitmap) return 1;
Und somit überspringt er den Rest.
Und lädt die Bitmap nicht mehr. Ein Freund meinte das irgendein Puffer/Cache gelehrt werden müsste.
Ich hoffe ihr könnt mir helfen.
 
Warum lädst du das Bild jedes mal neu, wenn du den Hintergrund aktualisieren möchtest?
Wäre es nicht weitaus sinnvoller die Bilder in einer Initialisierungsmethode zu laden und später nur zu verwenden, anstatt sie jedes mal neu zu laden.

Ich könnte mir durchaus denken, dass durch das wiederholte laden irgend ein Buffer überläuft.

Gruß
BlackMark
 
Gut, wußte nicht das sowas geht. Hättest du die Syntax oder ein Tutorial?
 
Wozu denn das?

Du hast den Code doch selbst hier gepostet, du musst ihn nur noch in eine passende Methode deiner Klasse schreiben und diese nur zum Programmstart aufrufen, damit du nicht jedes Mal, wenn du den Hintergrund aktualisieren willst, das Bild neu ladest.

Gruß
BlackMark
 
Also für jedes Bild eine Methode wo ich das Bild hinein lade, und ich es dann später verwenden kann?
 
Nein, eine Methode, die dir alle Bilder lädt, also initialisiert.
In dieser Methode rufst du LoadImage() auf um die Bilder zu laden und speicherst dann die HANDLEs auf die Bilder ab, damit du sie später verwenden kannst. Somit rufst du nur ein Mal pro Bild LoadImage() auf und nicht jedes Mal, wenn du das Bild verwendest.
Wenn dein Programm fertig ist, musst du natürlich auch wieder die HANDLEs freigeben, aber das weißt du bestimmt selbst.

Gruß
BlackMark
 
Ich würde ja die berühmten 3 worte zu dir sagen, aber das würde komisch kommen. Vielen vielen Dank :D. die nacht ist gerettet :D
 
Zurück
Oben