SVG Трансформации – примеры C#

В SVG трансформации используются для изменения положения, размера, ориентации и наклона элементов SVG на холсте. Объекты SVG можно трансформировать, используя свойства transform атрибута: translate, scale, rotate, skewX, skewY и matrix. Используя библиотеку Aspose.SVG for .NET, вы можете выполнять эти преобразования программно. В этой главе представлен общий обзор того, как вы можете работать с транформациями с помощью Aspose.SVG.

В текущей главе описаны популярные преобразования SVG, а также примеры C# для наиболее распространенных сценариев преобразования.

  • Поворот SVG – в этой статье рассмотрены примеры C# для поворота SVG. Рассмотрены случаи использования функции rotate() в атрибуте transform, а также матрицы преобразования matrix(a,b,c,d,e,f).
  • Масштабирование SVG – В этой статье рассмотрены примеры C# для масштабирования SVG.
  • Трансляция SVG – В этом разделе вы узнаете, как программно перемещать SVG на C#.

Несколько способов трансформации SVG на C#

  1. Использование свойств атрибута transform. Свойства атрибута преобразования в SVG позволяют манипулировать элементами с помощью следующих функций преобразования:
  1. Использование матрицы трансформации. Матрица трансформации – это математический способ описания преобразований SVG. Матрица включает значения масштабирования, поворота, наклона и перемещения, что обеспечивает большую гибкость при сложных преобразованиях. Матрица трансформации сочетает в себе преобразования перемещения, масштабирования, вращения и наклона.

Эти два способа предлагают разные уровни сложности и точности: атрибут transform проще использовать для простых трансформаций, а матрица трансформации обеспечивает больший контроль над процессом преобразования. Давайте рассмотрим эти методы на примерах C# для трансформации SVG, например для трансляции элемента SVG.

Трансформация SVG – функция Translate()

В следующем фрагменте кода C# показано, как создать элемент SVG <rect>, установить его атрибуты и применить трансформацию трансляции (перевода) с помощью атрибута transform. Преобразование перемещает прямоугольник на 150 единиц вправо и на 50 единиц вниз.

  1. Создайте экземпляр класса SVGDocument. Свойство RootElement указывает на корневой элемент <svg> документа.
  2. Создайте элемент <rect> с атрибутами и добавьте его к элементу <svg>:
    • Вы можете использовать метод CreateElementNS() для создания экземпляра класса SVGRectElement.
    • Вызовите метод SetAttribute(name, value), чтобы установить атрибуты, определяющие положение, размер, заливку и трансформацию. Атрибут transform устанавливается для элемента <rect> с использованием значения "translate(150, 50)". При этом применяется трансформация трансляции, которае перемещает прямоугольник на 150 единиц вправо и на 50 единиц вниз.
  3. Чтобы добавить rectElement к svgElement, вы можете использовать метод AppendChild().
  4. Вызовите метод Save(), чтобы сохранить полученное изображение SVG в локальный файл.
 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5	// Create a new SVG document
 6	using (var document = new SVGDocument())
 7	{
 8		var svgElement = document.RootElement;
 9
10		// Create a <rect> element and set its attributes
11		var rectElement = (SVGRectElement)document.CreateElementNS("http://www.w3.org/2000/svg", "rect");
12		rectElement.X.BaseVal.Value = 50;
13		rectElement.Y.BaseVal.Value = 50;
14		rectElement.Width.BaseVal.Value = 100;
15		rectElement.Height.BaseVal.Value = 100;
16		rectElement.SetAttribute("fill", "blue");
17
18		// Apply translate() function to the rectangle
19		rectElement.SetAttribute("transform", "translate(150, 50)");
20
21		// Append the <rect> element to the <svg> element
22		svgElement.AppendChild(rectElement);
23
24		// Save the document
25		document.Save(Path.Combine(OutputDir, "translate.svg"));
26	}

Матрица трансформации SVG

Здесь мы рассмотрим пример C#, аналогичный приведенному выше: создадим элемент SVG <rect>, установим его атрибуты и реализуем трансляцию с использованием матрицы трансформации. Давайте подробнее рассмотрим код C# для реализации матрицы трансформации.

  1. Используйте метод GetCTM() класса SVGGraphicsElement, который возвращает текущую матрицу преобразования (CTM), связанную с элементом <rect>. CTM представляет совокупные преобразования, примененные к элементу, и включает информацию о перемещении, вращении, масштабировании и наклоне, которые можно применить к элементу.
  2. После получения CTM используйте метод Translate(), который умножает трансформации перевода на текущую матрицу и возвращает результирующую матрицу. Метод Translate(dx, dy) принимает два аргумента – dx и dy, представляющие расстояния горизонтального и вертикального перемещения соответственно.
  3. Создайте transformAttribute – строковое представление двумерной матрицы преобразования, используя значения из модифицированного transformationMatrix. Матричное обозначение: matrix(a, b, c, d, e, f).
  4. Вызовите метод SetAttribute(), чтобы установить атрибут transform элемента <rect>.
 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5	// Create a new SVG document
 6	using (var document = new SVGDocument())
 7	{
 8		var svgElement = document.RootElement;
 9
10		// Create a <rect> element and set its attributes
11		var rectElement = (SVGRectElement)document.CreateElementNS("http://www.w3.org/2000/svg", "rect");
12		rectElement.X.BaseVal.Value = 150;
13		rectElement.Y.BaseVal.Value = 50;
14		rectElement.Width.BaseVal.Value = 100;
15		rectElement.Height.BaseVal.Value = 100;
16		rectElement.SetAttribute("fill", "blue");
17		svgElement.AppendChild(rectElement);
18
19		// Get the current transformation matrix associated with the rectElement
20		var transformationMatrix = rectElement.GetCTM();
21		transformationMatrix = transformationMatrix.Translate(150, 50);
22
23		// Apply the transformation matrix to the rectElement
24		var transformAttribute = "matrix(" + transformationMatrix.A + "," + transformationMatrix.B + ","
25			+ transformationMatrix.C + "," + transformationMatrix.D + "," + transformationMatrix.E + ","
26			+ transformationMatrix.F + ")";
27		rectElement.SetAttribute("transform", transformAttribute);
28
29		// Save the document
30		document.Save(Path.Combine(OutputDir, "translation-matrix.svg"));
31	}

Смотрите также

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.