ड्राइंग मैं एक प्रोग्राम है जो, मूल रूप से, (एक "छोड़ कैनवास" में) कई छोटे त्रिभुजों में एक ज्यामितीय आकार में कटौती तैयार की है, त्रिकोण के गुच्छा के लिए कुछ सरल गणितीय परिवर्तन लागू होती है और में उन्हें redraws उनकी नई विन्यास। नीचे स्क्रीन कैप्चर देखें।क्यूटी/C++: कुशलतापूर्वक
इन त्रिकोण आकर्षित करने के लिए में, मैं QPainter::drawPolygon
का उपयोग करें। दाईं तरफ प्रत्येक त्रिकोण बाईं ओर एक त्रिकोण से मेल खाता है, इसलिए मुझे पता है कि मैं इसे आकर्षित करने के लिए किस रंग का उपयोग करना चाहता हूं।
अभी तक, ठीक है। यहां तक कि अगर मैं इस से अधिक त्रिकोण खींचता हूं (जब मैं आकार को काटने के लिए बहुत छोटे त्रिकोण का उपयोग करता हूं), यह पर्याप्त तेज़ है।
मैं अपने कार्यक्रम के लिए एक सुविधा जोड़ी है: मैं एक के बजाय चित्र सादा त्रिकोण से निकाला त्रिकोण आकर्षित कर सकते हैं: स्क्रीन कब्जे के बाद देखते हैं।
समस्या यह है कि जिस तरह से मैं यह कर भी धीमी है। यहाँ कैसे मैं यह कर दिया गया है:
- मैं सभी त्रिकोण
- प्रत्येक त्रिकोण के लिए के माध्यम से चलाने के लिए, मैं प्रत्येक पिक्सेल कि प्रदर्शित किया जाएगा के निर्देशांक की गणना।
- इन पिक्सल में से हर एक के लिए, मैं चित्र पर इसी पिक्सेल के निर्देशांक (यह एक आसान गणितीय प्रक्रिया है) की गणना, और मुझे लगता है कि पिक्सेल के रंग को पुनः प्राप्त।
- मैं
QPainter::setPen(QColor)
औरQPainter::drawPoint(QPoint)
का उपयोग पिक्सेल आकर्षित करने के लिए।
मैं क्यूटी में प्रोग्रामिंग के लिए नया हूं और मुझे ग्राफिक्स के बारे में कुछ नहीं पता है, इसलिए मैं यही कर सकता हूं। समस्या यह है कि यह "अस्वीकार्य" बहुत धीमी है (प्रत्येक कैनवास के paintEvent
सादे त्रिकोण के मामले में 0.01 के मुकाबले 0.15s लेता है)।
मैं समझने के लिए क्या हो रहा है की कोशिश करने के लिए एक प्रोफाइलर भाग गया, मैंने देखा है कि में कैनवास विजेट के paintEvent
, समय की
- 58% में समय की
QPainter::drawPoint
- 27% खर्च किया जाता है खर्च किया जाता है
QPainter::setPen
में ऐसा लगता है कि QPainter::drawPoint
अभी तक बहुत जटिल और धीमी है: मैं बस यह किसी दिए गए रंग का एक पिक्सेल प्रिंट करना चाहते हैं, बस इतना ही।
मैं अपने समस्या का समाधान मिल गया है हो सकता है: स्टोर एक QImage
कि पूरी बात मैं अपने कैनवास प्रदर्शित करना चाहते हैं का प्रतिनिधित्व करता है, और पिक्सेल द्वारा मेरी paintEvent
पिक्सेल में यह पूरी तरह से परिभाषित करते हैं (मेरी कैनवास विजेट के एक सदस्य चर के रूप में), और फिर के साथ अपने paintEvent
के अंत में इसे एक बार खींचें। मुझे एक संकेत है कि यह बहुत तेज होगा। लेकिन इससे पहले कि मैं फिर से अपना कोड फिर से लिखूं, मैं जानना चाहता हूं कि वास्तव में मैं क्या करना चाहता हूं।
मुझे आशा है कि मैंने आपको मौत के लिए जन्म नहीं दिया! आपकी अंतर्दृष्टि के लिए अग्रिम धन्यवाद।
आप पिक्सेल द्वारा पिक्सेल चित्रित कर रहे हैं ?? (zomg !!) – UmNyobe