c# - 移动 UWP InkStrokes 以进行离屏渲染

标签 c# uwp uwp-xaml inkcanvas

我正在捕获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/

相关文章:

c# - UWP 中一个 CS 文件的不同 XAML 布局结构

c# - 当将一个类从 c# 编码到 native c++ 时,它会克隆吗?

c# - 使用 Array.exists() 在列表中查找整数

c# - xaml UWP 将焦点/选择设置为第一个 ListView 项

xaml - 如何更改 Windows 应用程序中的 RelativePanel 附加属性?

c# - UWP AutoSuggestBox QueryIcon 在添加样式后消失

C#解析XML文件

c# - 如何为我不拥有的类型和属性实现 TypeConverter?

c# - UWP - MVVM - 使用 ItemTemplate 按钮删除 ListView 项目

c# - append 到文本文件(不覆盖!)