2010-12-30 39 views
8

Tengo searched y entiendo cómo guardar una imagen en WPF usando BmpBitmapEncoder. Mi programa tiene una vista MVVM que quiero guardar como una imagen. ¿Es posible configurarlo como BitmapFrame para que pueda codificarlo? Si es así, ¿hay un tutorial en línea?Guardar wpf ver como imagen, preferiblemente .png

A continuación se representa la vista que quiero guardar.

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

OverallView es un control de usuario.


Si el establecimiento de un punto de vista como un BitmapFrame no es posible, lo que WPF elementos se puede configurar como un BitmapSource/Frame?

+2

¿Es útil esta publicación? http://www.grumpydev.com/2009/01/03/taking-wpf-screenshots/ –

Respuesta

16

Puede devolverlo como 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; 
} 

Después de que se puede utilizar el PngBitmapEncoder para guardarlo como PNG y guardarlo para transmitir, por ejemplo:

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

    encoder.Save(outputStream); 
} 

REVISIÓN: mapa de bits => resultado

+0

Cambia el mapa de bits al resultado. Aparte de eso, está bien. –

+0

oh, gracias por la pista. lo he arreglado –

+1

El parámetro 'src' puede ser' BitmapSource' para que sea más ampliamente utilizable. También el codificador local varaiable debe declararse var imho. – vidstige

Cuestiones relacionadas