我可以使用以下代码将Visual
渲染到位图:
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
RenderTargetBitmap renderBitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
VisualBrush brush = new VisualBrush(target);bounds.Value.Size));
context.DrawRectangle(brush, null, new Rect(new Point(), bounds.Value.Size));
}
renderBitmap.Render(visual);
return renderBitmap;
问题在于,如果Visual具有类似投影的位图效果,则生成的图像会被挤压。它似乎试图将视觉效果与阴影融合成一个没有投影的视觉大小的图像。
答案 0 :(得分:1)
在大多数情况下(如投影),效果的实际渲染超出了元素本身的范围。依靠ActualHeight和ActualWidth来调整图像大小,然后会产生您所看到的挤压效果。最好的解决方案是使用父容器,但可能需要更改布局。您还可以计算额外的填充值,以添加到元素的大小,以补偿效果渲染。有可能通过检查效果本身的属性来推导出这些值,并且可能也会涉及一些试验和错误。
答案 1 :(得分:0)
效果具有一组填充属性,并且用于设置效果使用的渲染区域的大小 - 请查看是否已修改这些区域,如果是,则调整渲染视觉的大小。请查看RenderTargetBitmap - Visual vector to bitmap和WPF Workings
上的文章