Uwp 调整InkCanvas中已绘制的Inkstrokes的大小

Uwp 调整InkCanvas中已绘制的Inkstrokes的大小,uwp,directx,transform,inkcanvas,win2d,Uwp,Directx,Transform,Inkcanvas,Win2d,在选择鼠标单击绘制的特定笔划后,我正在绘制矩形边界。之后,我想通过拖动矩形的角来调整矩形的大小。同时,我还希望调整以矩形为边界的笔划的大小 对于缩放,我尝试使用 Matrix3x2比例1=Matrix3x2.CreateScale(2.0f); foreach(笔划中的变量笔划) { stroke.PointTransform=scale1; } 但据我所知,当缩放时。它使用原始坐标系。(我在第二张图片的左上角标记了原始坐标系) 缩放时是否有方法更改坐标系?可以进行任何矩阵计算吗 如果有人在贬低

在选择鼠标单击绘制的特定笔划后,我正在绘制矩形边界。之后,我想通过拖动矩形的角来调整矩形的大小。同时,我还希望调整以矩形为边界的笔划的大小

对于缩放,我尝试使用

Matrix3x2比例1=Matrix3x2.CreateScale(2.0f);
foreach(笔划中的变量笔划)
{
stroke.PointTransform=scale1;
}

但据我所知,当缩放时。它使用原始坐标系。(我在第二张图片的左上角标记了原始坐标系)

缩放时是否有方法更改坐标系?可以进行任何矩阵计算吗

如果有人在贬低我的问题,请告诉我原因,这样我就可以提高自己并重新表述这个问题。 [注意:我正在使用自定义烘干和Win2D渲染墨迹,应用程序是用C#为UWP编写的]


我找到了一种方法来做到这一点。 假设我们正在移动右下角以调整大小

  • 使用SelectWithLine或SelectWithPolyLine函数获取并绘制边界矩形。(这也会将选定的笔划参数设置为True)
  • 使用OnPointerMoved获取xScale和yScale的比例因子
  • 随着指针的移动,重新绘制笔划和边界矩形
  • 应按如下方式进行缩放。(维护变量[xscaleprov,yscaleprov]以跟踪两个轴是否随指针移动而缩放)


  • 这就是我如何通过右下角调整大小的方法。类似地,这也可以在其他角落实现

    缩放时要使用“A”的坐标吗?从第二张图片中,您似乎希望根据“A”的左下角缩放笔划,然后您可以创建一个由给定中心点偏移的缩放矩阵。例如:

    var container = inkCanvas.InkPresenter.StrokeContainer;
    
    var bounds = container.BoundingRect;
    var center = new Vector2((float)bounds.Left, (float)bounds.Bottom);
    var transform = Matrix3x2.CreateScale(2.0f, 2.0f, center);
    
    foreach (var stroke in strokes)
    {
        stroke.PointTransform = transform;
    }
    

    是的,谢谢你的回答。在使用右下角调整大小时,我还添加了一个答案。我把中间作为左上角。问题是当我移动鼠标指针太快时,缩放会滞后。你知道吗?当指针相对于边界矩形的原始宽度移动时,我通过获得偏移x坐标来获得x比例因子。这是一个缩放问题还是与指针移动有关?我注意到您提到的指针移动,您将重新绘制笔划和边界矩形。可能在短时间内多次渲染会导致延迟,您可以尝试使用计时器并在移动鼠标时强制以固定的时间间隔(例如80ms)重新绘制,这将减少渲染数量并使其更平滑。
    var container = inkCanvas.InkPresenter.StrokeContainer;
    
    var bounds = container.BoundingRect;
    var center = new Vector2((float)bounds.Left, (float)bounds.Bottom);
    var transform = Matrix3x2.CreateScale(2.0f, 2.0f, center);
    
    foreach (var stroke in strokes)
    {
        stroke.PointTransform = transform;
    }