Операции загрузки / сохранения InkCanvas - PullRequest
3 голосов
/ 06 июня 2011

Я никогда не использовал InkCanvas контроль раньше. Что мне нужно, это загрузить файл в InkCanvas, нарисовать несколько каракулей и получить результирующее изображение. И я хочу сделать некоторые дополнительные операции с полученным изображением.

Что касается сохранения

Поправь меня, если я ошибаюсь. Я нашел ссылку: http://www.centrolutions.com/Blog/post/2008/12/09/Convert-WPF-InkCanvas-to-Bitmap.aspx Согласно посту будет загружено изображение, рассмотренное в дополнение к каракулям пользователя. Или он только конвертирует каракули в растровое изображение?

Что касается загрузки

Как загрузить изображение с помощью OpenFileDialog? Я не хочу использовать ISF.

Спасибо!

1 Ответ

5 голосов
/ 06 июня 2011

Сохранение:

Если вы хотите иметь возможность манипулировать штрихами после сохранения, то вам необходимо сохранить штрихи.Вы можете сделать это, используя метод StrokeCollection.Save .

var fs = new FileStream(inkFileName, FileMode.Create);
inkCanvas1.Strokes.Save(fs);

Затем вы можете загрузить его снова и получить доступ к отдельным штрихам.Однако, как только вы отрендерите его (например, в растровое изображение), этот отрендеренный файл может быть загружен только как растровое изображение, а не как отдельные штрихи.(Конечно, вы можете сделать и то и другое и сохранить штрихи в виде отдельного файла).Чтобы сохранить как растровое изображение, вы можете использовать код в ссылке, которую вы разместили.

Загрузка

Загрузка растрового изображения в элемент управления изображения является простой, поскольку OpenFileDialog вернет путь к изображению.

if (myOpenFileDialog.ShowDialog() == DialogResult.OK)
{
    myImageControl.Source = new BitmapImage(new Uri(myOpenFileDialog.FileName, UriKind.Absolute));
}

Это загрузит изображение и отобразит его в элементе управления изображением в вашей форме.

Редактировать: я не думаю, что вы можете загрузить растровое изображение прямо в InkCanvas.Однако вместо этого вы можете загрузить штрихи.

Чтобы снова загрузить штрихи, вы можете использовать StrokeCollection (Stream)

var fs = new FileStream(inkFileName,
                FileMode.Open, FileAccess.Read);
StrokeCollection strokes = new StrokeCollection(fs);
inkCanvas1.Strokes = strokes;

Для получения дополнительной информации вы можете прочитать эту статью CodeProject .

...