2009-05-13 7 views
5

Я хочу нарисовать Dib на HDC, того же размера. Я использую: des и src имеют одинаковый размер.StretchDIBits кажется медленным, есть ли API быстрее?

::StretchDIBits(hdc, 
       des.left,des.top,des.right - des.left,des.bottom - des.top, 
       src.left, GetHeight() - src.bottom, src.right - src.left,src.bottom - src.top, 
       m_pImg->accessPixels(),m_pImg->getInfo(), DIB_RGB_COLORS, SRCCOPY); 

, но я считаю, это очень медленный процесс, потому что размер дез это то же самое, мне просто нужно скопировать DIB на постоянном токе. Есть ли какой-либо метод быстрее, чем StretchDIBits?

как

StretchBlt (slow) vs Bitblt.(faster) 
StretchDIBits (slow) vs ?(faster) 
+0

Просто для любопытства, каков тип m_pImg? – Pumkko

ответ

8

разница Скорость приходит от выполнения любого необходимого цвета преобразования в дополнение к общности, необходимой для обработки растяжения (даже если ваш целевой размер такой же, как ваш размер источника).

Если вы просто рисуете изображение только один раз, то я думаю, что функция, которую вы ищете, это SetDIBitsToDevice.

Если вам небезразлична скорость, потому что вы рисуете один и тот же DIB несколько раз, то вы можете повысить производительность, скопировав DIB в совместимую память DC один раз, а затем BitBlt-из памяти DC на экран (или принтер) каждый раз, когда вам это нужно. Используйте CreateCompatibleDC, чтобы создать память DC, а затем используйте StretchDIBits или SetDIBitsToDevice, чтобы получить изображение на нем. После этого вы можете напрямую использовать BitBlt. Вы также можете изучить использование DIBSECTION, что дает компромисс в производительности между истинным DIB и совместимым DC.