Нарисовав что-то достойное, нам нужно это сохранить. Можно конечно воспользоваться созданием снимка экрана (см. "Как сделать скриншот (снимок) с экрана" и "Чем сделать скриншоты с курсором мыши"), но это не "юзер-френдли". Этот урок посвящен созданию кнопки "Сохранить".
Какого действия мы ждем от кнопки "Сохранить"? Вероятно, при нажатии кнопки должно сохраняться в файл изображения то, что нарисовано в контроле InkCanvas. Потому нам нужно будет определить:
- размеры контрола;
- место сохранения;
- формат файла.
Проще всего будет разобраться с форматом файла и местом сохранения. Для упрощения на первых этапах форматом изображения будет GIF, а местом сохранения "C:\Temp\file.gif".
Теперь добавим кнопку. Также перетащим из Toolbox кнопку Button, пропишем ей свойство Name "btn_Save" и значение Content = "Сохранить".
<Button x:Name="btn_Save" Content="Сохранить" HorizontalAlignment="Left" Margin="206,337,0,0" VerticalAlignment="Top" Width="75" />
Дважды кликните в списке обработчиков на поле Click и откроется код обработчика
private void btn_Save_Click(object sender, RoutedEventArgs e) { // }
Замените строчки указанным ниже кодом. Пояснения в комментариях.
private void btn_Save_Click(object sender, RoutedEventArgs e) { string imgPath = @"C:\Temp\file.gif"; //Куда сохраняется файл MemoryStream ms = new MemoryStream(); //Поток памяти :) FileStream fs = new FileStream(imgPath, FileMode.Create); // Поток файла :) //rtb - объект класса RenderTargetBitmap RenderTargetBitmap rtb = new RenderTargetBitmap((int)inkCanvas1.Width, (int)inkCanvas1.Height, 96, 96, PixelFormats.Default); rtb.Render(inkCanvas1); GifBitmapEncoder gifEnc = new GifBitmapEncoder(); //сохраняем в формате GIF gifEnc.Frames.Add(BitmapFrame.Create(rtb)); gifEnc.Save(fs); fs.Close(); MessageBox.Show("Файл сохранен, " + imgPath); //Для информации }
Более подробная информация о классе RenderTargetBitmap Class: https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap(v=vs.110).aspx
Как видно, наша программа обладает очень ограниченными возможностями, хотя их уже больше. Она позволяет рисовать, очищать нарисованное, сохранять изображение и закрывать приложение.
У меня видает ошибку PixelFormats.Default, что это может бить?
Комментарий by Саша — 05.06.2019 @ 18:15