Сохраните вид wpf как изображение, желательно .png - PullRequest
8 голосов
/ 30 декабря 2010

Я искал и понимаю, как сохранить изображение в WPF с помощью BmpBitmapEncoder.Моя программа имеет вид MVVM, который я хочу сохранить как изображение.Можно ли установить его как BitmapFrame, чтобы я мог его кодировать?Если да, есть ли онлайн-учебник?

Ниже приведен список, который я хочу сохранить.

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

OverallView - это пользовательский элемент управления.


Если установить представление как BitmapFrame невозможно, какие элементы wpf можно установить как BitmapSource/Frame?

1 Ответ

19 голосов
/ 30 декабря 2010

Вы можете вернуть его как 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;
}

После этого вы можете использовать PngBitmapEncoder , чтобы сохранить его в формате PNG и сохранить в потоке, например:

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

    encoder.Save(outputStream);   
}

ИСПРАВЛЕНИЕ: растровое изображение => результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...