Entwickler-Ecke
Windows API - DC für Bitmap-Funktionen erstellen und laden?
Andreas Pfau - Mo 03.02.03 21:30
Titel: DC für Bitmap-Funktionen erstellen und laden?
Hallo,
ich will mehrere Bitmap-Funktionen wie z.B. GetDibColorTable() nutzen. Laut Windows-SDK brauche ich dazu einen DC und das Bitmap da rein laden. Wie mache ich das? Also einen (vom Fenster unabhängigen) DC erstellen und das Bitmap da rein laden. Oder geht das evtl. auch ohne?
AndyB - Mo 03.02.03 22:34
DC := Bitmap.Canvas.Handle
mortus - Di 04.02.03 17:53
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var dc,dctmp:HDC; bitmap:HBITMAP; begin Bitmap:=LoadImage(hInstance,'c:\haha.bmp',IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE); if bitmap=0 then exit; dc:=GetDC(windowhandle); dctmp:=CreateCompatibleDC(dc); SelectObject(dctmp,Bitmap); bitblt(dc,left,top,width,height,dctmp,0,0,SRCCOPY); DeleteObject(bitmap); DeleteDC(dctmp); ReleaseDC(windowhandle,dc); end; |
Andreas Pfau - Di 04.02.03 18:38
Aber ich habe kein Fenster! Wie soll ich dann GetDc() einen Parameter übergeben? Aber trotzdem hat mich dein Beitrag auf eine Idee gebracht: ich könnte ja einfach mit CreateCompatibleDc(0) eine DC erstellen, der zum Desktop kompatibel ist, oder?
smiegel - Mi 05.02.03 10:39
Hallo,
@Andreas Pfau
ersetze einfach
dc:=GetDC(windowhandle);
durch
dc:=GetDC(0);
Andreas Pfau - Mi 05.02.03 18:12
Jawoll, Danke!
Delete - Mi 05.02.03 21:16
Ich weiß nicht, ob das so klever ist, denn jetzt hat er ein DC vom Bildschirm.
Andreas Pfau - Mi 05.02.03 21:44
Klar, aber warum ist das unklug? Ich brauche ja nur einen DC. Ich brauche nur irgend einen X-Beliebigen DC, um GetDibColorTable() zu verwenden, warum auch immer. Oder macht das was?
AndyB - Mi 05.02.03 21:45
| Andreas Pfau hat folgendes geschrieben: |
| Oder macht das was? |
Ich denke schon, denn somit bekommst du die ColorTable des Desktops.
Andreas Pfau - Mi 05.02.03 22:06
Oh, OK... :oops:
Was würdest du vorschlagen?
AndyB - Mi 05.02.03 23:00
siehe 1. Antwort.
Andreas Pfau - Do 06.02.03 17:42
Äh... ich habe kein Bitmap, hur das Handle... Wie bekomme ich dann den DC?
AndyB - Do 06.02.03 18:39
Wenn das so ist, dann verbrauchst du mit Bitmap.Handle := hbmp zu viel Speicher. Dann ist mortus' Lösung besser.
Andreas Pfau - Do 06.02.03 20:38
Hoppla... ich habe vergessen zu sagen, dass ich auch kein Fenster habe... :oops:
Ich habe eigentlich nur eine Unit. Der wird ein HBitmap als Parameter eine Prozedur übergeben. Und da will ich halt 'ne ColorTable.
PS: Gibt es evtl. 'ne Andere Möglichkeit, also ohne DC, and die Palette zu kommen?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!