2009-08-04 15 views
0

-I-Programm schreibe in C++ gdi gdi +. Zeichnung großes Bild auf Gdi + Bitmap ist langsam ist mit Gdi + API. So habe ich die folgende Art und Weise zu zeichnen:kann nicht zeichnen auf GDI + Bitmap-Objekt

Bitmap img(xxx); 
Graphics gr(&img); 
HDC dc = gr.GetHDC(); 
::StretchDIBits( 
    dc, 
    rec.left, rec.top, 
    (rec.right - rec.left), (rec.bottom - rec.top), 
    m_recRegin.left , m_recRegin.top, 
    m_recRegin.right - m_recRegin.left, m_recRegin.bottom - m_recRegin.top, 
    XXX, XXX, DIB_RGB_COLORS, SRCCOPY); 
gr.ReleaseHDC(dc); 

diesen Code ausführen perfekt einige Zeit. Aber wenn das systemweite Pool ist voll von vielen compatibleDCs mit großer Größe von CBitmap zu schaffen. Es scheint, dass nichts auf der Bitmap gezeichnet werden kann.

Was ist passiert? mit GDI + APIs

GetLastError() return 8.

Vielen Dank, wenn dieser Teil des Codes fehlgeschlagen ist, kann ich immer noch auf die Grafik zeichnen!

+1

Aktualisieren Sie uns mit dem Wert, der von GetLastError() zurückgegeben wird, nachdem der Aufruf von StretchDIBits() fehlgeschlagen ist. – arul

Antwort

1

GetLastError() return 8

8 ist "nicht genügend Speicherplatz diesen Befehl zu verarbeiten erhältlich ist."

So lief Sie Speicherung von für GDI ::StretchDIBits ausführen zu verwenden.

In Zukunft können Sie Windows-Fehler in der Befehlszeile Nachschlag mit: net helpmsg <error in decimal>.

+0

Danke! aber wenn das passiert, wie kann ich es genug Speicher für GDI machen? – user25749

+0

Erstellen Sie nicht so viele DCs? Warum brauchen Sie so viele DCs anstatt nur eine Menge Bitmaps? – MSN

0

Zusätzlich zu dem, was andere gesagt haben, implementieren Grafikobjekte IDisposable. Dies bedeutet, dass sie wahrscheinlich eine begrenzte Ressource halten (und tatsächlich tun). Stellen Sie sicher, dass Sie "gr.Dispose()" aufrufen oder Dinge in einen "using" -Block stellen. Wenn Sie dies nicht tun, überlässt es der Garbage Collector, festzustellen, wann die Objekte fertiggestellt und ihre Ressourcen freigegeben wurden. Dies ist eine schlechte Methode für ressourcenintensive Objekte - wie z. B. Grafiken.

Je nach Größe Bitmaps auch hungrig Ressource sein kann, da sie eine Menge RAM essen kann. Wenn die Bitmaps, die in Ihrem Codebeispiel verwendet werden, nie danach referenziert werden, stellen Sie sicher, dass sie gelöscht werden ...

Verwandte Themen