2012-01-09 10 views
8

मैं एक प्रोग्राम विकसित कर रहा हूं जिसमें विशेष एल्गोरिदम का उपयोग करके 1024x1024 चित्र पर प्रत्येक बिंदु के रंग की गणना करनी चाहिए। एक बिंदु का रंग कुछ मूल्य का प्रतिनिधित्व करता है। तो प्रत्येक बिंदु अन्य बिंदुओं से स्वतंत्र है और अलग से खींचा जाना चाहिए। मुझे तस्वीर को अक्सर ताज़ा करने की ज़रूरत नहीं है। असल में, मुझे इसे केवल एक बार प्रदर्शित करने की आवश्यकता है।क्यूटी। स्क्रीन पर 1024x1024 डॉट्स खींचने का सबसे तेज़ तरीका

क्यूटी में अलग पिक्सेल ड्राइंग करने का सबसे तेज़ तरीका क्या है?

क्या मुझे कुछ प्रकार की "स्क्रीन मेमोरी" मिल सकती है और सभी तस्वीर 4-बाइट सेट की सरणी के रूप में लिख सकती हैं, जो प्रत्येक पिक्सेल को उस स्मृति में 4 बाइट्स के रूप में दर्शाती है?

उत्तर

7

QImage कक्षा पिक्सेल मैनिपुलेशन के लिए अनुकूलित है। आप अपेक्षित आकार के साथ एक को चालू कर सकते हैं और फिर या तो व्यक्तिगत रूप से पिक्सल setPixel सेट कर सकते हैं, या कच्चे डेटा तक पहुंच सकते हैं और bits() के माध्यम से उन्हें स्थानांतरित कर सकते हैं। बस सही प्रारूप का उपयोग करना सुनिश्चित करें (उदाहरण के लिए 8-बिट छवियों के लिए आरजीबीए मान या रंग सूचकांक)

6

सबसे तेज़ समाधान QImage बनाने के लिए हो सकता है, इसे कुशल बनाएं (पिक्सल सेट करें) और उसके बाद इसे खींचने के लिए क्यूटी प्राप्त करें।

QImage वर्ग, तेजी से आईओ के लिए है मैनुअल से:

QImage वर्ग एक हार्डवेयर स्वतंत्र छवि प्रतिनिधित्व कि पिक्सेल डेटा के लिए सीधी पहुँच की अनुमति देता है प्रदान करता है, और एक पेंट उपकरण के रूप में इस्तेमाल किया जा सकता।

QImage क्लास प्रारूप enum द्वारा वर्णित कई छवि प्रारूपों का समर्थन करता है। इनमें मोनोक्रोम, 8-बिट, 32-बिट और अल्फा-मिश्रित छवियां शामिल हैं जो Qt 4.x के सभी संस्करणों में उपलब्ध हैं।

विस्तृत विवरण अनुभाग में पिक्सेल मैनिपुलेशन पर जानकारी है।

इसे प्रदर्शित करने के लिए इसे सबसे आसान तरीका QPixmap::fromImage के साथ एक पिक्समैप में परिवर्तित करना होगा और फिर इसे QLabel::setPixmap वाले लेबल में डालना होगा।

अधिक नियंत्रण के लिए, आप paintEvent ओवरलोड उप-वर्ग QWidget कर सकते थे, और QPainter::drawImage के साथ एक QPainter साथ QImage आकर्षित।

+0

प्लेटफ़ॉर्म के आधार पर प्रत्येक पेंट इवेंट में क्यूमेज को पुनर्स्थापित करना काफी महंगा हो सकता है, इसलिए पेंटिंग और कैश से पहले क्यूपीक्समैप में बेहतर रूप से परिवर्तित करें वह पिक्समैप। –

+0

फ्रैंक, धन्यवाद! – pavelkolodin

+1

वाह, क्यूमेज ने मुझे लगभग तुरंत अपनी तस्वीर खींचने की अनुमति दी, मेरे पास बड़ी एफपीएस है (-; – pavelkolodin

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

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