2009-10-22 14 views
6

मैं अपने डब्ल्यूपीएफ नियंत्रण में जीडीआई + ड्राइंग का उपयोग करना चाहता हूं।डब्ल्यूपीएफ में जीडीआई + ड्राइंग का उपयोग कैसे करें?

+0

कोई कारण क्यों? मुझे – moogs

+5

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

उत्तर

1

अपने WPF प्रोजेक्ट में विंडोज फॉर्म उपयोगकर्ता नियंत्रण को कंपोजिट करने का प्रयास करें और इसमें जीडीआई + ड्राइंग को समाहित करें। देखें Walkthrough: Hosting a Windows Forms User Control by Using the WPF Designer

+0

WinForms का उपयोग किए बिना सिस्टम :: ड्रॉइंग :: ग्राफिक्स क्लास का उपयोग करके जीडीआई + ड्राइंग का उपयोग करने का कोई तरीका है? – Sreenath

1

WPF नया ग्राफिक्स सुविधाओं के साथ आता है, आप इसे here जांच कर सकते हैं, लेकिन आप एक पुराने GDI + एपीआई एक ही रास्ता करने के लिए उपयोग करना चाहते हैं बनाने के लिए Winform वहाँ आकर्षित और WPF

में होस्ट
+0

WinForms का उपयोग किए बिना सिस्टम :: ड्रॉइंग :: ग्राफिक्स क्लास का उपयोग करके जीडीआई + ड्राइंग का उपयोग करने का कोई तरीका है? – Sreenath

+0

आप जीडीआई + –

+0

पर डिलिमपोर्ट का उपयोग करके देशी इंटरऑप लिख सकते हैं। Http://stackoverflow.com/questions/271686/c-transition-between-gdi-and-wpf यह पोस्ट –

-4

यह वह जगह है आम तौर पर एक बुरा विचार है। डब्ल्यूपीएफ एक पूरी तरह से नया एपीआई है और जीडीआई + में मिश्रण करने से खराब प्रदर्शन, मेमोरी लीक और अन्य अवांछित चीजें हो सकती हैं।

+3

में मदद कर सकता है यह उत्तर स्पष्ट रूप से किसी भी वास्तविक अनुभव पर आधारित नहीं है उन प्रौद्योगिकियों के साथ। –

9

ऐसा करने के कई तरीके हैं, आपके बिटकमैप को जीडीआई के साथ छेड़छाड़ करना सबसे आसान होगा, पिक्सेल बफर प्राप्त करें (बिटमैपडाटा में स्कैन 0 इंटप्राट जो आपको लॉक से मिलता है)। CopyMemory(...) आप पिक्सेल बफर से WriteableBitmap.BackBuffer पर।

WPF में अधिक प्रदर्शन करने योग्य तरीके हैं, जैसे WriteableBitmap के बजाय इंटरऑप बिटमैप का उपयोग करना। लेकिन उसे अधिक पी/आविष्कार की जरूरत है।

1

@ जेरेरियाया मॉरिल का समाधान वह है जो आप कोर पर करेंगे। हालांकि, माइक्रोसॉफ्ट कुछ इंटरऑप विधियों को प्रदान करने के लिए काफी अच्छा था:

using System.Windows.Interop; 
using Gdi = System.Drawing; 

using (var tempBitmap = new Gdi.Bitmap(width, height)) 
{ 
    using (var g = Gdi.Graphics.FromImage(tempBitmap)) 
    { 
     // Your GDI drawing here. 
    } 

    // Copy GDI bitmap to WPF bitmap. 
    var hbmp = tempBitmap.GetHbitmap(); 
    var options = BitmapSizeOptions.FromEmptyOptions(); 
    this.WpfTarget.Source = Imaging.CreateBitmapSourceFromHBitmap(hbmp, 
     IntPtr.Zero, Int32Rect.Empty, options); 
} 

// Redraw the WPF Image control. 
this.WpfTarget.InvalidateMeasure(); 
this.WpfTarget.InvalidateVisual(); 
+2

'जीडीआई' नामस्थान क्या है? ऐसा लगता है कि आपने 'सिस्टम' ड्रॉइंग 'को' जीडीआई (यानी जीडीआई = सिस्टम. ड्रॉइंग) का उपयोग किया है - क्या आप पुष्टि कर सकते हैं? –

+2

एलिसिंग सिस्टम। इस उदाहरण में जीडीआई में जाने से एक बहुत बुरा विचार है क्योंकि आप कोड को कॉपी और पेस्ट नहीं कर सकते हैं और यह पाठकों के लिए और भी भ्रम जोड़ता है। – CyberFox

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