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 -___________- |

Antworten auf die Frage(9)

Ihre Antwort auf die Frage