Я делаю краскоподобную программу, используя Win2D. Мой CanvasControl
содержит текст, изображения и некоторые строки, которые пользователь нарисовал. Я хочу сохранить все содержимое этого CanvasControl
в виде файла на диске (в любом стандартном формате изображения). Я хочу сделать это, поскольку я хочу отобразить его (позже) внутри стандартного элемента управления Image
.Как сохранить содержимое CanvasControl в качестве файла изображения
Как мне это сделать? Я попытался использовать 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
}
Можете ли вы показать код, где вы пытались «RenderTargetBitmap»? – RenDishen
@RenDishen Я добавил код, который я использую –
Посмотрите мой ответ ниже. Я думаю, вы говорили, что в основном вы хотите сохранить холст, как изображение правильно? – thewisegod