Hallo!
Das ist ja eigentlich genau das, was ich mache. Und wenn ich das Bitmap mit LoadImage() lade funktioniert es auch. Nur wenn ich das Bitmap mit CreateBitmap selbst erzeuge geht es nicht. Ich habe nur leider kein TImage wie bei deinem Beispiel, sondern nur die Bilddaten roh im Speicher. Der Aufruf von CreateBitmap() damit funktioniert auch, aber er zeigt trotzdem kein Bild an. Also muss denke ich noch irgendtwas falsch sein. Hier jetzt das ganze als etwas besserer Beispielcode zum einfachereren nachvollziehen:
Delphi-Quellcode:
procedure Test(Bilddaten: Pointer; Breite, Hoehe, Planes, Bits: Integer);
var
win_hdc : HDC;
mem_hdc : HDC;
bmp : HBITMAP;
begin
bmp := CreateBitmap(Breite, Hoehe, Planes, Bits, Bilddaten);
// Bitmap aus den Rohdaten erzeugen
if bmp = 0
then
begin
ShowMessage('
Fehler');
Exit;
end;
win_hdc := GetDC(win_hWnd);
// DC des Fensters
mem_hdc := CreateCompatibleDC(win_hdc);
// einen dazu kompatiblen DC im Speicher erzeugen
SelectObject(mem_hdc, bmp);
// das Bitmap in diesen DC wählen
BitBlt(win_hdc, 0, 0, Breite, Hoehe, mem_hdc, 0, 0, SRCCOPY);
end;
Wenn man CreateBitmap() hier durch
LoadImage(hInstance,'irgendeinbild.bmp',IMAGE_BITMAP,480,320,LR_LOADFROMFILE)
ersetzt funktioniert das ganze.
Die Bilddaten lade ich mit einem TFileStream, was auch in einer anderen Anwendung wo ich sie mit
OpenGL darstelle funktioniert.