Рис.6. Простейшая рисовалка своими руками

Нарисовав что-то достойное, нам нужно это сохранить. Можно конечно воспользоваться созданием снимка экрана (см. "Как сделать скриншот (снимок) с экрана" и "Чем сделать скриншоты с курсором мыши"), но это не "юзер-френдли". Этот урок посвящен созданию кнопки "Сохранить".

Какого действия мы ждем от кнопки "Сохранить"? Вероятно, при нажатии кнопки должно сохраняться в файл изображения то, что нарисовано в контроле InkCanvas. Потому нам нужно будет определить:

  1. размеры контрола;
  2. место сохранения;
  3. формат файла.

 

Проще всего будет разобраться с форматом файла и местом сохранения. Для упрощения на первых этапах форматом изображения будет 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

 

Как видно, наша программа обладает очень ограниченными возможностями, хотя их уже больше. Она позволяет рисовать, очищать нарисованное, сохранять изображение и закрывать приложение.