我正在寻找一个通用的 Nuget 包/库来将用户控件呈现为位图。我可以使用已知的用户控件来完成这项工作,包括等待任何图像控件加载其源代码,但这并不像通用解决方案那么容易(传递控件,返回位图)。我希望 Measure/Arrange 调用与 SizeChanged/Loaded/LayoutUpdated 事件相结合,可以帮助我知道一切何时完全准备就绪,但事件不会在我期望的时候加载。有没有我不知道的解决方案,或者有什么方法可以更好地连接事件?
问问题
88 次
1 回答
2
Loaded
在页面上触发事件后,您可以将任何控件呈现为位图。例如,下面的代码应该将您的 LayoutRoot 和 ContentPanel 渲染为位图,然后将它们保存为手机图片库中的 jpg。
public MainPage() {
InitializeComponent();
Loaded += (s, e) => {
SaveToMediaLibrary(GetBitmap(LayoutRoot), "LayoutRoot.jpg", 100);
SaveToMediaLibrary(GetBitmap(ContentPanel), "ContentPanel.jpg", 100);
};
}
private WriteableBitmap GetBitmap(FrameworkElement fe) {
// This will make sure all content are sized properly before returning
//fe.UpdateLayout();
var bmp = new WriteableBitmap((int)fe.ActualWidth, (int)fe.ActualHeight);
bmp.Render(fe, new MatrixTransform());
bmp.Invalidate();
return bmp;
}
public void SaveToMediaLibrary(WriteableBitmap bitmap, string name, int quality) {
using (var stream = new MemoryStream()) {
// Save the picture to the Windows Phone media library.
bitmap.SaveJpeg(stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, quality);
stream.Seek(0, SeekOrigin.Begin);
new MediaLibrary().SavePicture(name, stream);
}
}
于 2013-07-16T21:03:54.467 回答