![]() |
[GDI] Offscreen Bitmap - solved
Hoi
ich brauch mal wieder Hilfe. Erstmal mein bisheriger Code:
Code:
Wie krieg ich jetzt nen DC/ein Bitmap mit ner bestimmten Farbtiefe (24, besser 32 Bit)? Der hier scheint jedenfalls monochrom zu sein, das rote Rechteck ist aus Schwarz und Weiß gerastert :(.
HBITMAP hBMP;
HDC hDC; RECT Rect; int *pixels = new int[512*512]; hDC = CreateCompatibleDC(GetDC(NULL)); // GetDC(NULL) sollte einen DC zum Bildschirm zurückgeben, also in FARBE (bei mir jedenfalls) hBMP = CreateCompatibleBitmap(hDC, 512, 512); SelectObject(hDC, hBMP); Rect = (RECT){1, 1, 100, 100}; SetDCBrushColor(hDC, 0x00000000); HBRUSH hBrush = CreateSolidBrush(0x000000FF); FillRect(hDC, &TextRect, hBrush); DeleteObject(hBrush); // zum angucken auf den Schirm blitten BitBlt(GetDC(NULL), 0, 0, 512, 512, hDC, 0, 0, SRCCOPY); DeleteObject(hBMP); DeleteDC(hDC); delete [] pixels; Und wie komm ich hinterher an die Pixeldaten? Bei CreateBitmap kann man ja nen Pointer angeben (pixels), den vermiss ich hier auch. Wenns nur ein Rechteck zu zeichnen wär würd ichs ja selber machen, aber ich brauch GDI weil ich eigentlich Text zeichnen will.+ (Edith hats gelöst) |
Re: [GDI] Offscreen Bitmap
Was an TCanvas.TextOut() gefällt dir denn nicht?
Edit: Ach, C++! Wenns Borland C++ ist, gibts da aber ja auch die VCL und somit TCanvas 8) |
Re: [GDI] Offscreen Bitmap
Mit dem [GDI] im Titel wollte ich eigentlich andeuten dass ich GDI benutzen will und keine VCL und kein TCanvas ;)
Das Problem ist auch garnicht der Text sondern wie oben steht einen bunten offscreen DC zu kriegen und hinterher an die Pixel zu kommen. |
Re: [GDI] Offscreen Bitmap
Zitat:
Zu dem Problem: Ich hab bisher sehr wenig mit der GDI direkt gemacht, aber hilft es evtl. den Brush mit SelectObject in den DC zu selektieren? Ich weiss jetzt nicht, was GetDC(0) liefert, aber laut msdn kannst du CreateCompatibleDC direkt mit NULL aufrufen um einen Screen-DC zu erhalten. Vielleicht tuts das ja :) |
Re: [GDI] Offscreen Bitmap
Zitat:
Es geht auch nicht darum auf die VCL zu verzichten, ich hab einfach garkeine. Gibt ja nicht nur Borland C++. Zitat:
Zitat:
|
Re: [GDI] Offscreen Bitmap
![]() Zitat:
Zitat:
|
Re: [GDI] Offscreen Bitmap
Das klingt nach einem Teufelskreis, der DC ist monochrom und nimmt Farbinfos vom Bitmap, das Bitmap wird aber mit den Farben vom DC erzeugt. Und es gibt keine Mäglichkeit das zu ändern, jedenfalls hab ich noch keine gefunden :D
![]() So schauts aus, sowohl mit NULL als auch mit GetDC(NULL) bei CreateCompatibleDC ![]() ![]() |
Re: [GDI] Offscreen Bitmap
Also eines kann ich dir zumindest jetzt schon sagen: Es liegt nicht an einem Problem mit deinem Rechner. Ich hab deinen Code mal (mangels C++ Compiler) nach Delphi übersetzt, und bekomme das selbe Resultat. Immerhin schon mal etwas ;)
Edit: Folgendes klappt: DC := GetDC(0); oder DC := CreateDC(PChar('DISPLAY'), nil, nil, nil); Beides gibt einen DC zurück, auf den sich farbig zeichnen lässt. Sobald man aber CreateCompatibleDC() über einen derjenigen ausführt, ist der resultierende wieder monochrom. Daher sollte an und für sich auf jeden Fall die 2. Variante benutzbar sein. Ich habe mir das auch grad nur zusammengedokort da ich "zu Fuß" über GDI bislang auch nur eher sporadisch unterwegs war, aber hey! Zumindest war das Rechteck rot ;) |
Re: [GDI] Offscreen Bitmap
Willst du nicht erst einmal ein Bitmap erzeugen?
![]() Danach kannst du dann von DC zu DC blitten, wie du lustig bist :) |
Re: [GDI] Offscreen Bitmap
Hat er ;)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz