我使用SkiaSharp
在SKCanvas
上绘制一些SKRect。我正在尝试为绘图区域实现“缩放以适合和居中”功能。我使用以下代码来计算所有SKRect
的边界框。
private SKRect GetBoundingBox()
{
int xMin = AllRectangles.Min(s => (int)s.Left);
int yMin = AllRectangles.Min(s => (int)s.Top);
int xMax = AllRectangles.Max(s => (int)s.Right);
int yMax = AllRectangles.Max(s => (int)s.Bottom);
SKRect result = new SKRect(xMin, yMin, xMax, yMax);
return result;
}
现在,我要转换在PaintSurface期间使用的SKMatrix
,以使边界框居中(包含其中的所有项)并缩放边界框以适合SKCanvasView
。我有一个GIF,可以显示Photoshop中的“导航器视图”,可以完成我要构建的工作。
答案 0 :(得分:1)
我终于找到了解决问题的方法,并且我想分享我的代码,以帮助可能遇到类似问题的其他人。 以下方法计算矩阵的比例以适合视口。比例因子和视口矩形的平移都应用于矩阵。完成此操作后,需要重新绘制画布。
public void CenterAndFitRectangle(SKRect viewport)
{
var viewPortRectangle = _currentMatrix.MapRect(viewport);
var scale = Math.Min(CanvasView.Bounds.Width / viewPortRectangle.Width, CanvasView.Bounds.Height / viewPortRectangle.Height);
_currentMatrix.ScaleX = scale;
_currentMatrix.ScaleY = scale;
_currentMatrix.TransX = -viewPortRectangle.Left * scale
_currentMatrix.TransY = -viewPortRectangle.Top * scale;
}