2012-08-24 7 views
6

मुझे अपने छवि दर्शक को तेज़ करने की आवश्यकता है, और यह सोचकर कि मुझे ऐसा करने के लिए अपना खुद का डायरेक्टएक्स नियंत्रण बनाना चाहिए या नहीं।बड़ी छवियों को प्रदर्शित करने के लिए मूल WPF बनाम कस्टम डायरेक्टएक्स

मेरा छवि दर्शक चिकित्सा छवियों को प्रदर्शित करता है। वे बहुत बड़े हो सकते हैं। जब मैमोग्राफी की बात आती है तो हम 55 एमबी बात कर रहे हैं। पिक्सेल डेटा 16 बिट ग्रेस्केल एक ushort सरणी में संग्रहीत है। गोरो विवरण में शामिल होने के बिना, मेरा वर्तमान दृष्टिकोण पिक्सेल डेटा को एक छवि स्रोत में लोड कर रहा है, और WPF छवि नियंत्रण का उपयोग कर रहा है।

मैंने कभी भी DirectX के साथ कुछ भी नहीं किया है। क्या इसमें डाइविंग लायक है? क्या यह मूल WPF सामान से कहीं अधिक तेज़ होगा? यदि ऐसा है तो कितना महत्वपूर्ण है? या, क्या मुझे सिर्फ डायरेक्टएक्स के बारे में भूल जाना चाहिए और उन क्षेत्रों में देखना चाहिए जहां मैं अपना वर्तमान दृष्टिकोण सुधार सकता हूं?

किसी से पहले ऐसा कहने से पहले, मुझे पता है कि डब्ल्यूपीएफ डायरेक्टएक्स का उपयोग करता है। मैं सोच रहा हूं कि डब्ल्यूपीएफ परत को हटाने और डायरेक्टएक्स लिखने से मैं प्रदर्शन में सुधार करूंगा।

+0

क्या आप पूरी छवि, या बस इसके भाग दिखा रहे हैं। यदि आप स्क्रॉलव्यूअर का उपयोग करते हैं, तो यह केवल उस छवि को लोड करता है जो आपको स्मृति –

+0

@ जस्टिन पिहनी में पूरी छवि को प्रदर्शित करता है। –

+1

बस डायरेक्टएक्स याद रखें! = डायरेक्टएक्स। यह आपके द्वारा उपयोग किए जा रहे डायरेक्टएक्स रैपर पर भी निर्भर करता है।एक्सएम या प्रबंधित डायरेक्टएक्स की तुलना में स्लिम डीएक्स या sharpdx का बेहतर प्रदर्शन है। लेकिन सब कुछ मैं नहीं सोचता कि आपको बेहतर प्रदर्शन मिल रहा है। –

उत्तर

3

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

2 डी विंडोज एपीआई का उपयोग करना लागू करने के लिए सबसे आसान होगा और यदि आपको घूमने की आवश्यकता नहीं है और बस एक छवि प्रदर्शित करना और ज़ूम करना और पैन करना चाहते हैं तो हमेशा तेज़ होना चाहिए। यदि आप इसे एक बड़ी छवि के रूप में देखते हैं तो प्रदर्शन उतना अच्छा नहीं होगा जब आप एक अच्छी चिकनी छवि देने के लिए आधेtoning के साथ चित्रित कर रहे हैं तो ज़ूम आउट करें। ऐसा इसलिए है क्योंकि इसे हर बार खींचने पर छवि के सभी 55 एमबी को प्रभावी ढंग से पढ़ना होगा।

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

http://en.wikipedia.org/wiki/Mipmap

DirectX के साथ लागू करने 10x के रूप में मुश्किल हो सकता है: आप MIP-मैपिंग से परिचित नहीं हैं, तो यहां एक विकिपीडिया की कड़ी है। विभिन्न ग्राफिक्स हार्डवेयर में अधिकतम अधिकतम बनावट आकार होते हैं। सबसे अधिक संभावना है कि आपको आकर्षित करने के लिए कई छवियों में अपनी छवि को तोड़ने की आवश्यकता होगी और आपको रेंडर स्टेटस, मैट्रिक्स देखने आदि का ट्रैक रखना होगा।

हालांकि, यदि आप डायरेक्टएक्स का उपयोग करते हैं, तो आप बहुत से कार्यान्वित कर सकते हैं वास्तविक समय फोटो समायोजन आप दृश्य मैट्रिक्स को समायोजित करके रीयल-टाइम रोटेशन कर सकते हैं। आप पिक्सेल शेडर में रीयल-टाइम कंट्रास्ट, चमक, गामा और तेजता आसानी से कर सकते हैं।

दो अन्य एपीआई हैं जो मैं सुझाव दे सकता हूं। यदि आप स्वयं को Vista या बाद में सीमित करने के इच्छुक हैं तो Direct2D Direct3D से थोड़ा आसान होगा। इसके अलावा यदि आपको इसे गैर-विंडोज प्लेटफॉर्म पर लागू करने की आवश्यकता होगी तो मैं इसके बजाय ओपनजीएल का उपयोग करने का सुझाव दूंगा। मेरा वर्तमान प्रोजेक्ट डायरेक्ट 3 डी में है क्योंकि कुछ साल पहले जब हमने इसे शुरू किया था ओपनजीएल पीछे गिर रहा था और मैंने एंड्रॉइड उपकरणों की लोकप्रियता को नहीं छोड़ा। अब मैं चाहता हूं कि हमने ओपनजीएल का इस्तेमाल किया हो।

1

profiling आज़माएं ताकि यह देखने के लिए कि डब्ल्यूपीएफ अपना समय कहां खर्च कर रहा है। क्या आप छवियों को अपने मूल संकल्प पर प्रदर्शित कर रहे हैं? यदि नहीं, तो कुछ प्रीप्रोकैसिंग करने और 1/2 रिज़ॉल्यूशन संस्करण बनाने के लिए उपयुक्त हो सकता है।

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