Du bist nicht angemeldet.

Werbeanzeige

Tracert

Treue Seele

  • »Tracert« ist der Autor dieses Themas

Beiträge: 108

Wohnort: Braunschweig

Beruf: Student

  • Private Nachricht senden

1

23.09.2003, 05:15

Wie kann ich Bitmap in einem Fenster anzeigen ?

Hallo Leutz!

Heute mal mit einem etwas anderem "Problem". Ich habe über RegisterClassEx und CreateWindow ein Fenster erstellt. Ich würde nun gerne eine Bitmap-Datei auf diesem Fenster ausgeben. Soll nix mit DirectX oder ähnlichem zu tun haben, reine Windows GDI und reines C++ (kein MFC oder sonstiges, wie gesagt auf dem selbst erstellten Fenster).

Nun mag mancher lachen, aber mit so etwas banalem hatte ich mich bei C++ noch nie beschäftigt. ;) Wäre also über alle Informationen zu diesem Thema dankbar!

TR

2

23.09.2003, 10:27

Das ist mit ein paar Schritten gemacht.
Du lädst mit LoadImage die Bitmap. Die Funktion liefert dir ein Handle auf deine Bitmap. Mit GetObject kannst du dir noch die größe der Bitmap besorgen. Die Daten werden in der BITMAPINFO Struktur gespeichert.

Als nächstes must du noch einen Geräte Kontext erstellen

Quellcode

1
2
HDC hDCBitmap = CreateCompatibleDC(0);
SelectObject(hDCBitmap, hBitmap); // hBitmap ist der Handle auf deine Bitmap


Dann noch schnell die Funktion BitBlt oder eine andere Blit Funktion aufgerufen und deine Bitmap erscheint auf dem Display.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Tracert

Treue Seele

  • »Tracert« ist der Autor dieses Themas

Beiträge: 108

Wohnort: Braunschweig

Beruf: Student

  • Private Nachricht senden

3

23.09.2003, 16:23

Danke erstmal für die Antwort, aber ganz so einfach ist es für mich irgendwie doch noch nicht.

Die Bitmap habe ich über LoadImage so geladen:

Quellcode

1
2
HANDLE hBmp1;
hBmp1 = LoadImage(NULL, "Image1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);


Soweit richtig?
Probleme hab ich mit der GetObject-Methode. Kannst du mir vielleicht noch nen Beispiel posten, wie ich diese Funktion (und mit welchen Variablen) aufrufen soll, um die BITMAPINFO-Struktur mit der Größe des Bitmaps zu füllen?

Dank!
TR

[Edit]
Hab das mit GetObject so versucht:

Quellcode

1
2
BITMAP Bmp1;
GetObject(HBITMAP(hBmp1), sizeof(HBITMAP), (LPSTR)&Bmp1 );

So stand das irgendwo im Platform-SDK-Doku. Leider gibt die Funktion bloß 0 zurück, was heißt, dass sie fehlgeschlagen ist.
Ich dachte jetzt des liegt daran, weil hBmp1 kein echtes HBITMAP ist, aber LoadImage will bei mir kein HBITMAP zurückgeben...
Irgendeine Idee?

4

23.09.2003, 17:48

hehe..Der Rückgabetyp von LoadImage heißt nur anders, ist aber ein HBITMAP Typ. Sprich einfach Konvertieren.

Die GetObject Methode ist schon richtig. Was der Rückabewert jetzt heist weis ich auch nett. Muss ich selber nach schaun. Aber an sich ist der Code schon richtig.

Quellcode

1
2
3
4
HBITMAP hBit = (HBITMAP)LoadImage(...);

BITMAPINFO info;
GetObject(hBitmap, sizeof(BITMAPINFO), &info);
Die Struktur wird dann von GetObject passend gefüllt. Ist aber für die Darstellung nett nötig. Aber man brauch es ja für viele andere dinge ;)

Nach dem laden noch schnell den Geräte Kontext erstellen. Den Code dazu hab ich ja bereits gepostet. Nu kannste das ganze darstellen.

Quellcode

1
2
3
4
RECT rc;
GetClientRect(hWnd, &rc);

BitBlt(GetDC(hWnd), 0, 0, rc.right, rc.bottom, hDCBitmap, 0, 0, SRCCOPY);


Für rc.right und rc.bottom kannste natürlich auch feste Werte setzen, oder halt die Bitmap Breite und Höhe aus der BITMAPINFO Struktur.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Tracert

Treue Seele

  • »Tracert« ist der Autor dieses Themas

Beiträge: 108

Wohnort: Braunschweig

Beruf: Student

  • Private Nachricht senden

5

23.09.2003, 18:26

Ahhhhhhh. *lautes Klick*

Danke, klappt jetzt alles perfekt! :)

Mir fällt immer mehr auf, dass du zu denen gehörst, die auf so ziemlich alles eine Antwort haben. Du hast nur den Vorteil, dass deine meisten Antworten sogar konstruktiv sind. ;) *Respekt*

Danke nochmal!
TR

6

23.09.2003, 22:02

Ich jeb ma mühe ;D
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

CuTeX0r

Treue Seele

Beiträge: 174

Wohnort: Deutschland

  • Private Nachricht senden

7

23.09.2003, 22:17

kommt das in die faq plz?! ;) :huhu:

Lephro

Frischling

Beiträge: 66

Wohnort: Dortmund

Beruf: Schüler

  • Private Nachricht senden

8

23.09.2003, 22:24

joa würd ich auch vorschlagen !!!!
Everything that has a beginning has an end

Tobiking

1x Rätselkönig

  • Private Nachricht senden

9

23.09.2003, 22:38

Wenn es in die FAQ kommt schiebe ich noch 3 Links mit rein.

1. http://www.winprog.org/tutorial/bitmaps.html <---- Das was hier schon stand
+
2. http://www.winprog.org/tutorial/transparency.html <---- Transparente Bitmaps (wird schon langsam Dx7 ähnlich ;D )
+
3. http://www.winprog.org/tutorial/animation.html <------ Animationen sowie Double Buffering.

Werbeanzeige