Хорошо DrawDibDraw устарел.
Рассматривали ли вы попытку ускорить StretchDIBits? Здесь хороший ответ здесь
Конечно, вы можете сделать это без использования StretchDIBits.
если вы изначально загрузили свое изображение по
hBitmap = LoadImage( NULL, _T( "c:\\Path\File.bmp" ), IMAGE_BITMAP, LR_DEFAULTSIZE, LR_DEFAULTSIZE, LR_LOADFROMFILE );
SIZE size;
BITMAP bmp;
GetObject( (HGDIOBJ)hBitmap, sizeof( BITMAP ), &bmp );
size.cx = bmp.bmWidth;
size.cy = bmp.bmHeight;
Затем вы можете отобразить растровое изображение следующим образом.
HDC hBitmapDC = CreateCompatibleDC( hDC );
HGDIOBJ hOld = SelectObject( hBitmapDC, (HGDIOBJ)hBitmap );
SetStretchBltMode( hDc, HALFTONE );
StretchBlt( hDC, rcItem.left,rcItem.top, rcItem.right,rcItem.bottom, hBitmapDC, 0, 0, size.cx, size.cy, SRCCOPY );
SelectObject( hBitmapDC, hOld );
DeleteObject( hBitmapDC );
Конечно, стоит иметь в виду, что вам на самом деле не нужно создавать совместимый DC каждый раз, когда вы включаете, что значительно ускоряет процесс. Просто создайте совместимый DC и выберите для него растровый объект при загрузке изображения. Затем держите его, пока он вам не понадобится. При выключении просто удалите объект, как показано выше.