2011-11-29 7 views
6

रास्टरिंग वेक्टर छवि के सामान्य एल्गोरिदम के लिए सामान्य एल्गोरिदम? मुझे लाइनों, सर्कल, बेजियर घटता इत्यादि जैसे रास्टरराइजिंग प्राइमेटिव्स के बहुत सारे एल्गोरिदम मिले हैं, लेकिन सामान्य रूप से, मुझे क्या करना चाहिए? बस, वेक्टर तस्वीर में foreach वेक्टर आकृति जाओ, अपने पिक्सेल प्राप्त करें और उन्हें रास्टर छवि में डाल दिया? या कुछ और?वेस्टर छवि

और एक और सवाल, मैं concurrency का उपयोग कर प्रसंस्करण के समय में सुधार कैसे कर सकता हूं? मैं, उदाहरण के लिए, अलग वेक्टर आंकड़े कर सकते हैं और साथ ही साथ अपने पिक्सेल प्राप्त कर सकते हैं। लेकिन शायद ऐसा करने के लिए अन्य तरीके हैं?

+1

वर्तमान में आप किस वेक्टर ग्राफिक्स पर्यावरण का उपयोग करते हैं? मुझे पता है कि किसी भी ढांचे के लिए स्क्रीन पर या रास्टर बिटमैप पर वेक्टर ग्राफिक्स ड्राइंग के लिए एक तैयार समाधान है, जो आपके लिए रास्टरराइजिंग समस्या को हल करता है। –

+0

मैं @DocBrown से सहमत हूं। पहिया को दोबारा शुरू न करें जब तक कि आप सभी संभावित मौजूदा विकल्पों का प्रयास नहीं कर लेते हैं, और फिर भी, जितना संभव हो उतना काम करें जितना अनगिनत अन्य पहले से ही किया गया है ताकि आप जितना संभव हो उतना कम जमीन पर फिर से चल रहे हों। – cdeszaq

+0

जो कि प्रश्न की विशेषता है, मुझे किसी भी ठोस वेक्टर को रास्टराइज करने की आवश्यकता नहीं है और मैं ठोस फ्रेमवर्क का उपयोग नहीं करता हूं। यह एक सैद्धांतिक प्रश्न है, और मैं दिलचस्प हूं, इन ढांचे का उपयोग करके कौन से एल्गोरिदम हैं और मैं इन एल्गोरिदम को समेकन के साथ कैसे सुधार सकता हूं :) – medvedNick

उत्तर

3

छवि में प्रत्येक बहुभुज के लिए सामान्य रास्टरराइजेशन एल्गोरिदम यह है।

(एक बहुभुज को सीधे लाइन सेगमेंट और पैरामीट्रिक स्प्लिंस से बने एक या अधिक बंद वक्र के रूप में परिभाषित किया जाता है - सामान्य अभ्यास में ये दूसरे क्रम (शंकु उपनाम वर्ग) और तीसरे क्रम (घन) बेज़ीयर स्प्लिंस होते हैं। ये बंद वक्र परिभाषित किया गया है कि अंदरूनी हमेशा बाईं तरफ होता है, क्योंकि वक्र को घुमाया जाता है, इसलिए सामान्य आकार घड़ी के विपरीत चलते हैं और छेद घड़ी की दिशा में चलते हैं।)

(i) (प्रक्षेपण) बहुभुज को उसी समन्वय प्रणाली में कनवर्ट करें गंतव्य बिटमैप। संकल्प एक जैसा नहीं होना चाहिए, और एंटी-एलाइज्ड छवियों के लिए अक्सर अधिक होता है: उदाहरण के लिए, फ्रीटाइप 64 पिक्सल का उपयोग करता है।

(ii) (वाई में monotonic बनाओ) जहां आवश्यक हो, बहुभुज के प्रत्येक खंड को छोटे सेगमेंट में विभाजित करें जो लगातार ऊपर या नीचे चलते हैं। इस चरण को केवल घुमावदार खंडों के लिए जरूरी है, और बेज़ीर स्प्लिंस का उपयोग करते समय अपेक्षाकृत आसान है। सामान्य विधि मोनोटोनिसिटी हासिल होने तक बार-बार विभाजित करना है। सभी क्षैतिज खंडों को छोड़ दें।

(iii) (रन सीमाओं को चिह्नित करें) प्रत्येक सेगमेंट को अस्थायी बिटमैप में खींचें। सीधे लाइनों के लिए ब्रेसेनहम के एल्गोरिदम का प्रयोग करें; वक्र के लिए, जब तक रेखा वास्तविक वक्र से पिक्सेल के 1/8 (कहें) से आगे नहीं है, तब तक विभाजित करें, फिर प्रारंभ से अंत तक एक सीधी रेखा का उपयोग करें। ड्राइंग करते समय, किसी भी तरीके से पिक्सेल को इंगित करने के लिए चिह्नित करें (ए) चाहे वे रन के प्रारंभ या समाप्ति हों - नीचे की रेखाएं शुरू होती हैं, और ऊपर की रेखाएं समाप्त होती हैं; (बी) कवरेज - आकार के अंदर पिक्सेल का अंश। यह वह जगह है जहां विवरण में एल्गोरिदम भिन्न होते हैं, और जहां घुमावदार नियम (non-zero बनाम even-odd) प्रतिष्ठित हैं।

(iv) (स्कैन) अस्थायी बिटमैप, पंक्ति से पंक्ति को पार करें। प्रत्येक पंक्ति के लिए, बाएं से दाएं स्कैन करें। एक राज्य बनाए रखें जो इंगित करता है कि वर्तमान स्थिति आकृति के अंदर है या नहीं (उदाहरण के लिए) बिटमैप में संग्रहीत संख्या को संग्रहीत संख्या में जोड़ना। सरल मोनोक्रोम रास्टराइजेशन में, इस चरण को पिछले चरण में लिखा गया है, आकार में किनारे को पार करते समय +1 होगा और आकार से बाहर आने पर -1 होगा। एक ही राज्य में पिक्सल के रन जमा करें। अपने ड्राइंग मॉड्यूल पर रन भेजें: उदाहरण के लिए, फ्रीटाइप एक वाई समन्वय से युक्त चलता है, एक्स समन्वय शुरू और समाप्त करता है, और 0 से 255 तक कवरेज। ड्राइंग मॉड्यूल वर्तमान ड्राइंग रंग पर लागू अल्फा मान के रूप में कवरेज का उपयोग कर सकता है , या एक बनावट के लिए लागू एक मुखौटा के रूप में।

उपरोक्त एक बहुत अधिक सरलीकरण है लेकिन सामान्य विचार देता है।

सबसे खुला स्रोत कार्यक्रमों निम्नलिखित परियोजनाओं में से एक से ली गई रैस्टराइज़ेशन कोड का उपयोग करें: - एक फ़ॉन्ट रास्टेराइज़र जो दोनों मोनो और विरोधी aliasing रास्टेराइज़र मॉड्यूल है कि स्टैंड-अलोन उपयोग करने के लिए अपेक्षाकृत आसान कर रहे हैं शामिल हैं -

FreeType कि किसी भी आकार के लिए, न केवल फोंट के लिए है। मैंने इस प्रणाली का कई व्यावसायिक पोर्टेबल सी ++ परियोजनाओं में सफलतापूर्वक उपयोग किया है।

फ्रीटाइप की प्रणाली रैफ लेवियन के Libart से प्रेरित थी।

Anti-Grain एक और लोकप्रिय और प्रभावशाली सी ++ लाइब्रेरी है।

Kiia Kallio द्वारा लागू scan-line edge flag system भी है, जो वादा करता है और एंटी-अनाज से तेज़ लगता है।

अधिकांश लेकिन इन सभी पुस्तकालयों में वर्गिक और घन बेज़ीर स्प्लिंस के साथ-साथ सीधी रेखा खंडों से बने आकार स्वीकार नहीं करते हैं। जो नहीं करते (उदा।, के। कालीओ की लाइब्रेरी) केवल सीधे-धारित बहुभुज लेते हैं; लेकिन वास्तविक वक्र से वांछित अधिकतम दूरी की तुलना में रेखा खंडों की श्रृंखला में एक वक्र को 'फ़्लैटन' करना काफी आसान है। फ्रीटाइप आंतरिक रूप से करता है, और जब आवश्यक हो तो उसका कोड उधार लिया जा सकता है।

+0

प्रश्न था "पुस्तकालय क्या करते हैं" के बारे में नहीं, बल्कि "वे यह कैसे करते हैं" के बारे में नहीं। हालांकि, उत्तर – medvedNick

+0

के लिए धन्यवाद आप सही हैं। मैंने इसे सरल तरीके से उपाय करने की कोशिश की है। रास्टरराइजेशन एल्गोरिदम बहुत जटिल हो जाते हैं, हालांकि, मोटे तौर पर गति के लिए नींद की वजह से, और Google के माध्यम से पूर्ण स्पष्टीकरण देखना सर्वोत्तम होता है। –