Win2Dを使ってペイントっぽいプログラムを作っています。MyCanvasControl
には、ユーザーが描いたテキスト、画像、および線が含まれています。CanvasControl
これの内容全体をファイルとしてディスクに保存したいと思います(標準の画像形式で)。Image
標準コントロール内に(後で)表示したいので、これを行いたいと思います。
どうすればいいですか?RenderTargetBitmap
(以下のコード)を読み込んでみCanvasControl
ましたが、何らかの理由で画像がクリップされ、小さな水平上部の画像のみが作成されます。
async private void Button_Click(object sender, RoutedEventArgs e)
{
#region (c) rendering UIElement to bitmap code
var bitmap = new RenderTargetBitmap();
await bitmap.RenderAsync(ccDraw); // ccDraw is CanvasControl
// get the pixels
IBuffer pixelBuffer = await bitmap.GetPixelsAsync();
byte[] pixels = pixelBuffer.ToArray();
// write the pixels to a InMemoryRandomAccessStream
var stream = new InMemoryRandomAccessStream();
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, pixels);
await encoder.FlushAsync();
stream.Seek(0);
Image iNew = new Image();
iNew.Stretch = Stretch.None;
iNew.Source = bitmap;
gOuter.Children.Add(iNew);
ccDraw.Visibility = Visibility.Collapsed; // hide CanvasControl so we can see added image
#endregion
}