2009-03-16 11 views
5

मैं क्या कर रहा हूं एक बिटमैप में कई बिटमैप्स प्रस्तुत कर रहा है। सैकड़ों छवियां हो सकती हैं और बिटमैप को 1000x1000 पिक्सेल से अधिक किया जा सकता है।एकाधिक थ्रेड से एक बिटमैप ऑब्जेक्ट को प्रस्तुत करना

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

कोई विचार? धन्यवाद

उत्तर

0

आप प्रत्येक थ्रेड को बाइट सरणी में लिख सकते हैं, फिर जब वे सब खत्म हो जाएंगे, तो बाइट एरे से बिटमैप ऑब्जेक्ट बनाने के लिए एकल थ्रेड का उपयोग करें। यदि सभी अन्य प्रसंस्करण हाथ से पहले किए गए हैं, तो यह बहुत तेज़ होना चाहिए।

1

ली, यदि आप छवि जीडीआई + ऑब्जेक्ट का उपयोग करने जा रहे हैं, तो आप बस दो बार काम कर सकते हैं। आपके द्वारा विभाजित किए जाने वाले अनुभागों को आपके विभाजन के अंत में फिर से इकट्ठा करने और दृष्टिकोण को जीतने की आवश्यकता होगी और क्या वह पहले स्थान पर विभाजित करने के उद्देश्य को पराजित नहीं करेगा?

यह समस्या केवल तभी खत्म हो सकती है जब आप बिटमैप खंडों में से कुछ जटिल कर रहे हों जो कि छवि उपपरों को केवल उस समस्या के बिना बड़े बिटमैप पर फिर से निकालने से अधिक प्रसंस्करण समय होगा।

उम्मीद है कि मदद करता है। आप किस तरह की छवि प्रतिपादन की योजना बना रहे हैं?

+0

हाँ मैंने सोचा कि बस पोस्ट करने के बाद, एन बिटमैप्स को एक बड़े से खींचने के अलावा कुछ भी अतिरिक्त नहीं है, लगभग हर समय ड्राइमेज विधि में खर्च किया जाता है। एक नया विचार चाहिए। –

0

मैंने कुछ ऐसा ही किया है और मेरे मामले में मेरे पास प्रत्येक थ्रेड लॉक एक्स (छवि के आकार और धागे की संख्या पर निर्भर करता है) छवि में बिट्स की कई पंक्तियां होती हैं, और उनके लेखन उन बिट्स पर करते हैं कि किसी धागे ने कभी भी अपने लेखन को ओवरलैप नहीं किया है।

4

आप लॉकबिट का उपयोग कर सकते हैं और छवि के अलग-अलग वर्गों पर काम कर सकते हैं।

यह कैसे किया जाता है इसके उदाहरण के लिए आप पेंट.Net स्रोत कोड, विशेष रूप से BackgroundEffectsRenderer (हां यह मोनो शाखा का एक लिंक है, लेकिन पेंट.Net मुख्य कोड केवल उपलब्ध है ज़िप फ़ाइलें)।

0

एक दृष्टिकोण एक कृत्रिम वस्तु बिटमैप, जो सिर्फ एक दो आयामी int सरणी होगा पर सभी छोटे बिटमैप्स रेंडर करने के लिए (जो सभी एक Bitmap की तरह वास्तव में वैसे भी है) होगा। एक बार सभी छोटे बिटकमैप बड़े सरणी में संयुक्त हो जाते हैं, तो आप एक ही आयाम के वास्तविक Bitmap में बड़ी सरणी से एक बार की प्रतिलिपि बनाते हैं।

मैं विंडोज मोबाइल उपकरणों पर जटिल ग्राफिक्स के लिए हर समय इस दृष्टिकोण (बहु-थ्रेडेड पहलू सहित) का उपयोग नहीं करता, क्योंकि "वास्तविक" जीडीआई + बिटमैप्स बनाने के लिए उपलब्ध स्मृति गंभीर रूप से सीमित है।

आप मूल रूप से इच्छित Bitmap का उपयोग भी कर सकते हैं। Bitmap को थ्रेड-सुरक्षित होने की गारंटी नहीं है, लेकिन मुझे यकीन नहीं है कि यह तब तक एक समस्या होगी जब तक आप यह सुनिश्चित कर सकें कि बिटमैप के एक ही भाग को कभी भी दो धागे ओवरराइट नहीं कर रहे हैं। मैं इसे कम से कम कोशिश करता हूं।

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

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