gdi + Graphics :: DrawImage wirklich langsam ~~
Ich verwende eine GDI + -Grafik, um ein 4000 * 3000-Bild auf dem Bildschirm zu zeichnen, aber es ist sehr langsam. Es dauert ungefähr 300ms. Ich wünschte es würde weniger als 10ms dauern.
Bitmap *bitmap = Bitmap::FromFile("XXXX",...);
//-------------------------------------------- // Dies Teil dauert ca. 300ms, schrecklich!
int width = bitmap->GetWidth();
int height = bitmap->GetHeight();
DrawImage(bitmap,0,0,width,height);
// ------------------------------------------
Ich kann CachedBitmap nicht verwenden, da ich die Bitmap später bearbeiten möchte.
Wie kann ich es verbessern? Oder stimmt etwas nicht?
Diese native GDI-Funktion zeichnet das Bild auch auf den Bildschirm, und es dauert nur 1 ms:
SetStretchBltMode(hDC, COLORONCOLOR);
StretchDIBits(hDC, rcDest.left, rcDest.top,
rcDest.right-rcDest.left, rcDest.bottom-rcDest.top,
0, 0, width, height,
BYTE* dib, dibinfo, DIB_RGB_COLORS, SRCCOPY);
// ----------------------------------------------- ---------------
Wenn ich StretchDIBits verwenden möchte, muss ich BITMAPINFO übergeben. Wie kann ich BITMAPINFO von einem Gdi + -Bitmap-Objekt abrufen? Ich habe das Experiment mit FreeImage lib gemacht, ich rufe StretchDIBits mit dem FreeImageplus-Objekt auf, es zeichnet sehr schnell. Aber jetzt muss ich Bitmap zeichnen und einen Algorithmus in das Bit-Array von Bitmap schreiben. Wie kann ich BITMAPINFO erhalten, wenn ich ein Bitmap-Objekt habe? Es ist wirklich nervig -___________- |