UWPでアプリ自身のScreenShotを撮ってクリップボードに張り付ける方法

コード

お困りの方がいらっしゃったようで、先にコードを公開。

C#
using System;
using System.Threading.Tasks;
using Windows.ApplicationModel.DataTransfer;
using Windows.Storage.Streams;
using Windows.UI.Xaml.Controls;
using Windows.Graphics.Imaging;
using Windows.UI.Xaml.Media.Imaging;
using System.Runtime.InteropServices.WindowsRuntime;

  public class Screenshot
  {
      public async Task ScreenshotOriginalAsync(Page page)
      {
          await StartCaptureAsync(page);
      }
      public async Task StartCaptureAsync(Page page)
      {
          var bitmap = new RenderTargetBitmap();
          await bitmap.RenderAsync(page);

          var pixels = await bitmap.GetPixelsAsync();

          var stream = new InMemoryRandomAccessStream();
          var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
          encoder.SetPixelData(BitmapPixelFormat.Bgra8
          , BitmapAlphaMode.Premultiplied
          , (uint)bitmap.PixelWidth
          , (uint)bitmap.PixelHeight
          , 96.0, 96.0
          , pixels.ToArray());
          await encoder.FlushAsync();

          var dataPackage = new DataPackage();
          dataPackage.SetBitmap(RandomAccessStreamReference.CreateFromStream(stream));
          Clipboard.SetContent(dataPackage);
      }
  }

以下、工事中。

参考サンプル

簡易解説

Microsoftでのサンプルでは、BITMAPクラスをファイル保存している。

System.Windows.Clipboardは、SetContentしかなく、また、引数としてWindows.ApplicationModel.DataTransfer.DataPackageしか受けつけない。
なので、変換する必要があります。

コメント

タイトルとURLをコピーしました