我正在使用 c# 和 xaml 为 Windows 8 商店应用程序创建一个应用程序。我使用了一个画布,其中添加了多个图像,现在我不想将画布保存到图片库中。
谢谢 :)
我正在使用 c# 和 xaml 为 Windows 8 商店应用程序创建一个应用程序。我使用了一个画布,其中添加了多个图像,现在我不想将画布保存到图片库中。
谢谢 :)
您可以使用 WinRT XAML 工具包的合成库。Measure
像在屏幕上显示、调用和在根元素上一样构建您的 UI,以将Arrange
其调整为输出图像尺寸并使用其中一种扩展方法 -WriteableBitmapRenderExtensions.Render()
或分别.RenderToPngStream()
渲染为 aWriteableBitmap
或MemoryStream
。然后,如果您在应用程序的清单中启用图片库访问功能,则可以将位图或流保存到文件中。
我花了很多时间尝试使用 SharpDX 和 WinRt 工具包渲染 UI 元素而没有任何结果,之后发现有一个非常好的类:RenderTargetBitmap,可以用于此类任务。这是来自此网站 http://mariusbancila.ro/blog/2013/11/05/render-the-screen-of-a-windows-store-app-to-a-bitmap-in-的代码片段windows-8-1/comment-page-1
async Task<RenderTargetBitmap> CaptureToStreamAsync(FrameworkElement uielement, IRandomAccessStream stream, Guid encoderId)
{
try
{
var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(uielement);
var pixels = await renderTargetBitmap.GetPixelsAsync();
var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
var encoder = await BitmapEncoder.CreateAsync(encoderId, stream);
encoder.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Ignore,
(uint)renderTargetBitmap.PixelWidth,
(uint)renderTargetBitmap.PixelHeight,
logicalDpi,
logicalDpi,
pixels.ToArray());
await encoder.FlushAsync();
return renderTargetBitmap;
}
catch (Exception ex)
{
DisplayMessage(ex.Message);
}
return null;
}