2012-01-16 20 views
7

मैं this आलेख का पालन कर रहा था और मुझे अपना कैनवास सहेजा गया, हालांकि, मैं कोड की कार्यक्षमता को विस्तारित करना चाहता हूं और अपने पूरे कैनवास की बजाय छवि के रूप में अपने कैनवास का एक विशेष भाग सहेजना चाहता हूं ।एक छवि के रूप में एक WPF कैनवास सहेजना

मैंने rect.Offset और rect.Location गुणों को सेट करने का प्रयास किया लेकिन छवि हमेशा मेरे कैनवास के ऊपरी बाएं कोने से सहेजी जाती है।

क्या कोई जानता है कि मैं अपनी वांछित कार्यक्षमता को उसी तरह कैसे प्राप्त कर सकता हूं?

धन्यवाद!

उत्तर

15

एक सरल विधि पूरे कैनवास प्रतिपादन के बाद एक CroppedBitmap उपयोग करने के लिए किया जाएगा। यदि आपको एकाधिक छवियों की आवश्यकता है तो आप उसी RenderTargetBitmap का पुन: उपयोग कर सकते हैं।

RenderTargetBitmap rtb = new RenderTargetBitmap((int)canvas.RenderSize.Width, 
    (int)canvas.RenderSize.Height, 96d, 96d, System.Windows.Media.PixelFormats.Default); 
rtb.Render(canvas); 

var crop = new CroppedBitmap(rtb, new Int32Rect(50, 50, 250, 250)); 

BitmapEncoder pngEncoder = new PngBitmapEncoder(); 
pngEncoder.Frames.Add(BitmapFrame.Create(crop)); 

using(var fs = System.IO.File.OpenWrite("logo.png")) 
{ 
    pngEncoder.Save(fs); 
} 
+0

बहुत बढ़िया! ऐसा लगता है कि चाल चल रही है! –

0

देखें कि यह समाधान आपके लिए काम करता है या नहीं।

Size size = new Size(width, height); 
canvas.Measure(size); 
canvas.Arrange(new Rect(X, Y, width, height)); 

//Save Image 
... 
... 

// Revert old position 
canvas.Measure(new Size()); 
+0

यह ओपी अनुरोध के रूप में अनुरोध नहीं किया जाएगा कि एक्स, वाई निर्देशांक निर्दिष्ट नहीं किए जा सकते हैं। केवल वांछित चौड़ाई और ऊंचाई। –

+0

सैमुअल सही है, मैं अपने आयताकार आकार को बदलने में सक्षम हूं, हालांकि मैं इसे कहीं और स्थान नहीं दे सकता लेकिन शीर्ष बाएं कोने का डिफ़ॉल्ट प्रारंभ बिंदु ... –

+0

आपने अपने नए आकार के रूप में क्या सेट किया? – MyKuLLSKI

0

आपके द्वारा पोस्ट किए गए लिंक को देखते हुए, जाहिर है आप यहां प्रस्तुत लक्ष्य निर्देशांक चुन सकते हैं।

RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, 
    (int)rect.Bottom, 96d, 96d, System.Windows.Media.PixelFormats.Default); 
+0

यह एक्स और वाई के निर्देशांक को शुरू करने की अनुमति नहीं देता है - केवल वांछित चौड़ाई और ऊंचाई। –

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