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编写的]
我找到了一种方法来做到这一点。 假设我们正在移动右下角以调整大小
这就是我如何通过右下角调整大小的方法。类似地,这也可以在其他角落实现 缩放时要使用“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;
}