2012-04-29 14 views
7

में प्रस्तुत करना मेरे पास एक WPF एप्लिकेशन है जिसका उद्देश्य लाइव स्ट्रीम में एचयूडी को ओवरले करना है। मूल विचार WPF अनुप्रयोग की सामग्री को प्रदर्शित करने के लिए xsplit (लाइव स्ट्रीम प्रस्तुत करने के लिए एक लोकप्रिय अनुप्रयोग) के लिए एक प्लगइन बनाना था। इस दृष्टिकोण के साथ समस्या यह है कि xsplit के COM इंटरफ़ेस में बिटमैप को प्रतिपादन करने के लिए CPU प्रदर्शन में हानिकारक है (जैसा कि मुझे लगता है कि xsplit के COM इंटरफ़ेस में समस्याएं हैं और साथ ही साथ RenderTargetBitmap CPU को टैक्स करने का उपयोग कर रहे हैं)।डब्ल्यूपीएफ के आंतरिक से डायरेक्टएक्स एप्लिकेशन

मैं सीधे गेम (लक्ष्य डायरेक्टएक्स एप्लिकेशन) में ओवरले को प्रस्तुत करने पर विचार कर रहा हूं क्योंकि यह कई लाभ प्रदान करता है। मुख्य रूप से यह xsplit में प्रदर्शन समस्याओं को खारिज कर देता है, लेकिन विभिन्न स्ट्रीमिंग और अनुप्रयोगों को कैप्चर करने के लिए एप्लिकेशन को भी खोलता है।


मैं एक बहुत ही डायरेक्ट के साथ अनुभव नहीं कर रहा हूँ, लेकिन मुझे लगता है कि इस समाधान की रूपरेखा है

  1. WPF आवेदन प्रारंभ और WPF के Direct3D डिवाइस पर कब्जा (via this method)

  2. का पता लगाएं और लक्षित डायरेक्टएक्स एप्लिकेशन के एंडसेन कॉल (using EasyHook+Slimdx)

  3. शौकीन DirectX आवेदन के ontop WPF डिवाइस की सतह की सामग्री को प्रस्तुत


मुख्य प्रश्न मैं कैसे SlimDX का उपयोग कर चरण 3 पूरा करने के लिए है। मुझे आशा है कि एक समाधान सतह का पुन: उपयोग कर सकता है और प्रतिलिपि पर भरोसा नहीं कर सकता क्योंकि लक्ष्य हुक किए गए आवेदन के प्रदर्शन को प्रभावित नहीं करता है। मैं क्षेत्र को सीमित करने और पारदर्शिता का समर्थन करने में सक्षम होना चाहूंगा। मैं यह भी सोच रहा हूं कि हुक किए गए डायरेक्टएक्स एप्लिकेशन के डिवाइस में डब्ल्यूपीएफ के डायरेक्ट 3 डी डिवाइस का उपयोग करने से कोई अस्थिरता हो सकती है।

किसी भी अंतर्दृष्टि की सराहना की जाएगी, धन्यवाद।

+0

आपने इसे करने के लिए कैसे मैंग किया? मैं एक समान स्थिति में फंस गया हूँ। – alDiablo

उत्तर

1

मैं ऐसा करने की कोशिश कर रहा हूं। क्या मैं अब तक पाया है कि आप एक बिटमैप करने के लिए अपने wpfvisualtree प्रदान कर सकते हैं और बाद में लिखने D3D डिवाइस बिंदु में कब्जा 2.

void render(Direct3D.Device device) 
{ 

wpfRenderTargetBitmap.Render(WpfVisualTree); 
wpfRenderTargetBitmap.CopyPixels(devicePtr); 

} 

मैं परीक्षण फ्लॉप यह अभी तक के लिए बिटमैप है, लेकिन मुझे लगता है कि मैं पर हूँ इसके साथ सही ट्रैक। अब मेरी एकमात्र समस्या यह है कि मैंने अपनी खिड़की से सभी अंतःक्रियाशीलता को खो दिया। बटन क्लिक और इतने पर अब कब्जा नहीं किया जाएगा ...

उस पर कोई मदद अच्छी होगी।

+0

क्या आप जो कर रहे थे उसके साथ आपको कोई सफलता मिली? – alDiablo

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