0

我正在使用 c# 和 xaml 为 Windows 8 商店应用程序创建一个应用程序。我使用了一个画布,其中添加了多个图像,现在我不想将画布保存到图片库中。

谢谢 :)

4

2 回答 2

1

您可以使用 WinRT XAML 工具包的合成库。Measure像在屏幕上显示、调用和在根元素上一样构建您的 UI,以将Arrange其调整为输出图像尺寸并使用其中一种扩展方法 -WriteableBitmapRenderExtensions.Render()或分别.RenderToPngStream()渲染为 aWriteableBitmapMemoryStream。然后,如果您在应用程序的清单中启用图片库访问功能,则可以将位图或流保存到文件中。

于 2013-10-10T15:23:20.923 回答
0

我花了很多时间尝试使用 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;
}
于 2015-08-02T14:10:41.577 回答