我正在捕获InkStrokes,并且需要在背景中创建笔划的缩放位图图像。无论墨水的边界框有多大,捕获的图像都需要具有统一的尺寸。
例如,如果绘制原始墨迹笔划,并且墨迹 Canvas 上的边界框顶部/左侧为 100,100,大小为 200,200,我希望墨迹从新渲染位图的 0,0 处开始,即 50,50大小(现在忽略笔划宽度的影响)。
我已经弄清楚如何缩放墨迹笔划(感谢 StackOverflow ),但不知道如何移动笔划。现在,我似乎必须创建一个 InkCanvas 大小的位图,渲染缩放后的墨水,然后将更大的图像裁剪为正确的大小。
我尝试通过InkStroke.PointTranslate使用
var scaleMatrix = Matrix3x2.CreateScale(scale);
scaleMatrix.Translation = -offset; // top/left of ink stroke bounding box
stroke.PointTransform = scaleMatrix;
但是坐标不正确。
非常感谢任何帮助。
最佳答案
您可以通过矩阵相乘来组合变换。这对我有用
var strokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes();
var boundingBox = inkCanvas.InkPresenter.StrokeContainer.BoundingRect;
var matrix1 = Matrix3x2.CreateTranslation((float)-boundingBox.X, (float)-boundingBox.Y);
var matrix2 = Matrix3x2.CreateScale(0.5f);
var builder = new InkStrokeBuilder();
var newStrokeList = new List<InkStroke>();
foreach (var stroke in strokes)
{
newStrokeList.Add(builder.CreateStrokeFromInkPoints
(stroke.GetInkPoints(), matrix1 * matrix2));
}
//Add the translated and scaled strokes to the inkcanvas
inkCanvas.InkPresenter.StrokeContainer.AddStrokes(newStrokeList);
关于c# - 移动 UWP InkStrokes 以进行离屏渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52118890/