2011-03-31 72 views
1

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

有没有办法在Silverligth或WPF中做到这一点?

回答

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 
    }; 
} 
+0

你打败了我,我试图找到一个使用'VisualBrush'的好例子 – Rachel 2011-03-31 19:49:17