2010-12-30 14 views
8

.png मैं searched है और BmpBitmapEncoder का उपयोग करके WPF में एक छवि को बचाने के लिए कैसे समझते हैं। मेरे प्रोग्राम में एक एमवीवीएम दृश्य है कि मैं एक छवि के रूप में सहेजना चाहता हूं। यह BitmapFrame के रूप में सेट करने के लिए तो मैं यह सांकेतिक शब्दों में बदलना कर सकते हैं संभव है? यदि हां, तो क्या कोई ऑनलाइन ट्यूटोरियल है?छवि के रूप में सहेजें WPF देखने के लिए, अधिमानतः

नीचे सूचीबद्ध दृश्य मैं सहेजना चाहते है।

<Grid> 
     <view:OverallView Grid.Row="1" 
         Visibility="{Binding IsOverallVisible,Converter={StaticResource B2VConv}}" 
         /> 
    </Grid> 

OverallView उपयोगकर्ता नियंत्रण है।


तो एक BitmapFrame के रूप में एक दृश्य की स्थापना संभव नहीं है, क्या तत्वों WPF एक BitmapSource/Frame के रूप में स्थापित किया जा सकता है?

+2

इस पोस्ट मदद करता है? http://www.grumpydev.com/2009/01/03/taking-wpf-screenshots/ –

उत्तर

16

आप RenderTargetBitmap के रूप में यह लौट सकते हैं:

public static RenderTargetBitmap GetImage(OverallView view) 
{ 
    Size size = new Size(view.ActualWidth, view.ActualHeight); 
    if (size.IsEmpty) 
     return null; 

    RenderTargetBitmap result = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32); 

    DrawingVisual drawingvisual = new DrawingVisual(); 
    using (DrawingContext context = drawingvisual.RenderOpen()) 
    { 
     context.DrawRectangle(new VisualBrush(view), null, new Rect(new Point(), size)); 
     context.Close(); 
    } 

    result.Render(drawingvisual); 
    return result; 
} 

उसके बाद आप PNG के रूप में उसे सहेज को बचाने के लिए PngBitmapEncoder उपयोग कर सकते हैं स्ट्रीम करने के लिए, जैसे:

public static void SaveAsPng(RenderTargetBitmap src, Stream outputStream) 
{ 
    PngBitmapEncoder encoder = new PngBitmapEncoder(); 
    encoder.Frames.Add(BitmapFrame.Create(src)); 

    encoder.Save(outputStream); 
} 

ठीक: बिटमैप => परिणाम

+0

परिणाम के लिए बिटमैप बदलें। इसके अलावा, यह ठीक है। –

+0

ओह, संकेत के लिए धन्यवाद। मैंने इसे ठीक कर दिया है। –

+1

'src' पैरामीटर' BitmapSource' यह अधिक व्यापक रूप से प्रयोग करने योग्य बनाने के लिए हो सकता है। इसके अलावा एन्कोडर स्थानीय varaiable घोषित किया जाना चाहिए var imho। – vidstige

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