我有一个图像,我想在该图像上渲染控件(datgrid或其内容的任何ui元素),并将整个事物输出为图像。 请帮助。
我发现了一些类似的链接,只是看看他的回答但没有帮助.. Silverlight: Create image from silverlight controls
提前致谢。 :)
答案 0 :(得分:1)
我使用以下方法在某处创建了一个来自frameworkelement的图像(基本上是网格,画布,按钮,文本框......)
它接受控件范围内的任何内容并将其作为ImageSource类型返回,从那里我认为将其保存到文件或将其输出到屏幕的道路是一小步。
请注意:我删除了一些应该解决边距问题的代码,因此请务必考虑到这一点,或者不要为要转换为图像的控件设置边距。
你现在基本上想要做的是使用GridCombiner并将其提供给下面的方法,因此它将通过ImageBackground上的DataGridMyData创建一个图像作为ImageSource。
希望这就是您所寻找的,如果没有,请告诉我。
public ImageSource ToImageSource(FrameworkElement obj) // FOR WPF
{
// Save current canvas transform
Transform transform = obj.LayoutTransform;
obj.LayoutTransform = null;
// Get the size of canvas
Size size = new Size(obj.Width, obj.Height);
// force control to Update
obj.Measure(size);
obj.Arrange(new Rect(size));
RenderTargetBitmap bmp = new RenderTargetBitmap(
(int)obj.Width, (int)obj.Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(obj);
// return values as they were before
obj.LayoutTransform = transform;
return bmp;
}
public ImageSource ToImageSource(FrameworkElement obj) // FOR SILVERLIGHT
{
// Save current canvas transform
Transform transform = obj.RenderTransform;
obj.RenderTransform = null;
// Get the size of canvas
Size size = new Size(obj.Width, obj.Height);
// force control to Update
obj.Measure(size);
obj.Arrange(new Rect(new Point(), size));
WriteableBitmap bmp = new WriteableBitmap(obj, transform);
bmp.Render(obj, transform);
// return values as they were before
obj.RenderTransform = transform;
return bmp;
}
你的xaml就像是:
<Grid x:Name="GridCombiner" Width="300" Height="150">
<Image x:Name="ImageBackground" Source="c:/myimg.jpg" Width="300" Height="150" />
<DataGrid x:Name="DataGridMyData" ItemsSource="{Binding}" Width="300" Height="150" />
</Grid>