Как изменить размер штрихов InkCanvas в UWP?

У меня есть нерешенная проблема с моим InkCanvas в моем приложении UWP.

Я сохранил свои штрихи в базе данных SQLite из InKCanvas с размерами a*b. Теперь я хочу отобразить эти штрихи на другом InkCanvas с размерами, отличными от InkCanvas с a*b (например, a/2 * b/2).

Как я могу изменить размер своих обводок? Я пытался использовать:

var allStrokes = myInkCanvas.InkPresenter.StrokeContainer.GetStrokes();
foreach(var item in allStrokes)
{
    item.PointTransform() = ...// I tried to transform my Strokey with a 3x2 Matrix
                               // But it didn't work. 
}

Может быть, кто-то может помочь.


person Agredo    schedule 05.09.2016    source источник


Ответы (1)


Преобразование с матрицей сработало для меня.

Я использовал заводской метод Matrix3x2.CreateScale следующим образом:

var strokes = InkDisplay.InkPresenter.StrokeContainer.GetStrokes();
foreach ( var stroke in strokes )
{
    stroke.PointTransform = 
       Matrix3x2.CreateScale( 
          xScale,
          yScale 
       );
}

Обратите внимание, что значения xScale и yScale представляют собой относительный масштаб, а это означает, что при переходе от холста для чернил размером X*Y к холсту для чернил размером (X/2)*(Y*2) значения будут xScale = 0.5 и yScale = 2.

Вы можете увидеть образец, который я создал на моем GitHub.

person Martin Zikmund    schedule 06.09.2016
comment
Спасибо. Моя проблема заключалась в неправильном использовании Матрицы. Я создал его вручную, и что-то пошло не так. Теперь все отлично работает с вашим кодом. Особенно с методом Matrix3x2.CreateScale(x, y). - person Agredo; 07.09.2016
comment
Отлично, рад, что это помогло :-). Пожалуйста, отметьте мой ответ, чтобы вопрос был решен :-). - person Martin Zikmund; 07.09.2016