2011-05-03 18 views
10

को नियंत्रित करता है एक बिटमैप छवि के लिए एक WPF नियंत्रण प्रदान के रूप में मैं आज पता चला एक छोटी सी कार्य नहीं है। मैं अब माता-पिता नियंत्रण मार्जिन के साथ काम कर के रूप में जानते हैं एक समस्या के रूप में रिक Strahl अपने ब्लॉग में लिखा हैप्रस्तुत एक "दिखाई नहीं" WPF एक बिटमैप छवि

http://www.west-wind.com/weblog/posts/2007/Sep/10/Rendering-a-WPF-Container-to-Bitmap

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

मैं कैसे एक दृश्य खिड़की में जोड़ने के बिना किसी भी नियंत्रण का एक बिटमैप बना सकते हैं?

उत्तर

19

नए तत्वों को उनके लेआउट प्रदर्शन नहीं किया है। आपको इसे प्रस्तुत करने से पहले माप पर कॉल करने और नियंत्रण पर व्यवस्थित करने की आवश्यकता है।

Canvas c = new Canvas(); 

Rectangle r = new Rectangle 
{ 
    Fill = Brushes.Orange, 
    Width = 200, 
    Height = 100 
}; 

Ellipse e = new Ellipse 
{ 
    Fill = Brushes.DodgerBlue, 
    Width = 100, 
    Height = 100 
}; 

Canvas.SetLeft(e, 150); 

c.Children.Add(r); 
c.Children.Add(e); 

var size = new Size(250,100); 
c.Measure(size); 
c.Arrange(new Rect(size)); 

RenderTargetBitmap bmp = new RenderTargetBitmap(250, 100, 96, 96, PixelFormats.Pbgra32); 

bmp.Render(c); 

PngBitmapEncoder enc = new PngBitmapEncoder(); 
enc.Frames.Add(BitmapFrame.Create(bmp)); 

using(var s = File.OpenWrite("image.png")) 
    enc.Save(s); 
संबंधित मुद्दे