从XAML View生成图像

时间:2011-03-31 19:29:54

标签: c# wpf silverlight graphics dynamic-image-generation

我想动态地生成一些图像。为此,我打算创建一个XAML视图,用Data填充它(使用DataBinding),然后从该视图的渲染生成一个图像(截图类型)。

有没有办法在Silverligth或WPF中执行此操作?

3 个答案:

答案 0 :(得分:6)

在WPF中:

public static Image GetImage(Visual target)
{
    if (target == null)
    {
        return null; // No visual - no image.
    }
    var bounds = VisualTreeHelper.GetDescendantBounds(target);

    var bitmapHeight = 0;
    var bitmapWidth = 0;

    if (bounds != Rect.Empty)
    {
        bitmapHeight = (int)(Math.Floor(bounds.Height) + 1);
        bitmapWidth = (int)(Math.Floor(bounds.Width) + 1);
    }

    const double dpi = 96.0;

    var renderBitmap =
        new RenderTargetBitmap(bitmapWidth, bitmapHeight, dpi, dpi, PixelFormats.Pbgra32);

    var visual = new DrawingVisual();
    using (var context = visual.RenderOpen())
    {
        var brush = new VisualBrush(target);
        context.DrawRectangle(brush, null, new Rect(new Point(), bounds.Size));
    }

    renderBitmap.Render(visual);

    return new Image
    {
        Source = renderBitmap,
        Width = bitmapWidth,
        Height = bitmapHeight
    };
}

答案 1 :(得分:1)

在Silverlight中使用WriteableBitmap及其Render功能。

In WPF use this trick使用RenderTargetBitmap及其Render函数

答案 2 :(得分:0)

您可以将要捕获的控件(数据后数据)添加到ViewBox - http://www.wpftutorial.net/ViewBox.html

从那里,您可以使用WriteableBitmap创建图像 - http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap%28VS.95%29.aspx