2010-12-30 19 views
8

私はsearchedを持っており、BmpBitmapEncoderを使用してWPFでイメージを保存する方法を理解しています。私のプログラムには、MVVMビューがあり、これをイメージとして保存します。 BitmapFrameに設定することができますので、私はそれをエンコードすることができますか?もしそうなら、オンラインチュートリアルはありますか?wpfビューをイメージとして保存します。好ましくは.png

以下に、保存したいビューを示します。

<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); 
} 

FIX:ビットマップ=>結果

+0

ビットマップを結果に変更します。それ以外は、その罰金。 –

+0

ああ、ヒントのおかげで。私はそれを修正しました。 –

+1

'src'パラメータは、より広く使用できるようにするために' BitmapSource'にすることができます。また、エンコーダローカル変数はvar imhoと宣言する必要があります。 – vidstige

関連する問題