2015-04-01 5 views
1

Я только начал работать в приложении WPF. Здесь мне нужно получить подпись от пользователя. Я использую управление Inkcanvas для реализации этой функции.Кадрирование поглаженной области как растровое изображение из контейнера InkCanvas

Мне любопытно узнать, есть ли способ в управлении Inkcanvas обрезать поглаженную область только с некоторым внешним краем. Я не хочу пустое пространство контейнера Inkcanvas в выходном растровом изображении. если подпись слишком мала, я хочу обрезать область и растянуть ее до определенного размера (300x200).

+0

Проще всего ограничить соотношение сторон «InkCanvas» до заданного размера (300 x 200), но сделать его удобным для пользователя. Я имею в виду, установите этот «InkCanvas» как 600x400 и сохраните весь InkCanvas в качестве изображения, а затем измените его размер до 300x200. Потому что трудно обнаружить «поглаженную область». – kennyzx

+0

@kennyzx. Скажем, у меня есть «InkCanvas» с разрешением 600x400. Если пользователь использует только 50x50 этого контейнера для подписи. Тогда в выводе будет много пустого пространства, если я сохраню весь «InkCanvas». , Я не хочу этого. Я хочу использовать только пространство. – Gopichandar

ответ

2

ОК, сначала вам нужно определить прямоугольник для обрезки («поглаженная область»), затем save it to an image.

InkCanvas имеет свойство Strokes, которое представляет собой набор чернильных штрихов, вы можете получить границы каждого штриха, вызвав метод Stroke.GetBound. Тогда вы можете получить свойство Left «поглаженной области», которое является левым свойством крайних левых границ. И вы также получаете право, верх и низ таким же образом. Надеюсь, вы поймете мое объяснение.

Изменение размера обрезанного изображения до 300x200 должно быть довольно простым, вы можете найти множество ответов на Stackoverflow.

+0

Спасибо. Позвольте мне попробовать. – Gopichandar

+1

Наконец-то, понял! 'GetBound' сделал трюк для меня. Однако для реализации функции требуется некоторое время :). – Gopichandar

0

Я думаю, что это изменилось для Windows 10 Universal. В некотором роде, хотя и отличается, это может быть немного проще.

С вашим InkCanvas у вас есть InkPresenter.StrokeContainer, и оттуда вы можете получить свойство BoundingRect, которое даст вам массу подробностей о ограничивающем прямоугольнике ваших штрихов (то есть x, y, width, height, left, право, и т.д. ...)

Итак, вот что я сделал:

var bounds = myCanvas.InkPresenter.StrokeContainer.BoundingRect; 
var left = bounds.Left; 
var right = bounds.Right; 
//and so on... 

После того, как у вас есть данные ограничивающий прямоугольник, очень легко урожай.

Надеюсь, это поможет!

 Смежные вопросы

  • Нет связанных вопросов^_^