2009-05-13 10 views
5

मैं एक एचडीसी, एक ही आकार में एक डुबकी खींचना चाहता हूं। मैं उपयोग कर रहा हूं: des और src एक ही आकार के हैं।StretchDIBits धीमा लगता है, क्या कोई एपीआई तेज है?

::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); 

लेकिन मुझे लगता है कि यह धीमा है, क्योंकि des आकार समान है, मुझे बस डीबी पर डीआईबी की प्रतिलिपि बनाने की आवश्यकता है। क्या StretchDIBits से कोई विधि तेज है?

बस के रूप में

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

सिर्फ जिज्ञासा के लिए, m_pImg का प्रकार क्या है? – Pumkko

उत्तर

8

गति अंतर व्यापकता खींच संभाल करने के लिए आवश्यक (अपने लक्ष्य आकार अपने स्रोत आकार के समान ही है, भले ही) के अलावा कोई भी आवश्यक रंग रूपांतरण करने से आता है।

यदि आप सिर्फ एक बार छवि खींच रहे हैं, तो मुझे लगता है कि आप जिस फ़ंक्शन को ढूंढ रहे हैं वह SetDIBitsToDevice है।

यदि आप गति की परवाह करते हैं क्योंकि आप एक ही डीआईबी को कई बार आकर्षित कर रहे हैं, तो आप डीआईबी को एक संगत मेमोरी डीसी में एक बार कॉपी करके प्रदर्शन कर सकते हैं, और फिर BitBlt-डीसी से स्क्रीन तक स्मृति (या प्रिंटर) हर बार जब आपको इसकी आवश्यकता होती है। स्मृति डीसी बनाने के लिए CreateCompatibleDC का उपयोग करें, और उसके बाद छवि प्राप्त करने के लिए StretchDIBits या SetDIBitsToDevice का उपयोग करें। उसके बाद, आप सीधे BitBlt का उपयोग कर सकते हैं। आप DIBSECTION का उपयोग करने में भी देख सकते हैं, जो एक वास्तविक डीआईबी और एक संगत डीसी के बीच प्रदर्शन में एक समझौता देता है।

संबंधित मुद्दे