У меня есть большая коллекция символов в формате svg, которую нужно рисовать в сеансе рисования Canvas в Win2D. Многие из них будут повторяться, поэтому я намерен заранее загрузить их в библиотеку. Кажется, есть разные способы сделать это. Одним из них является CanvasSvgDocument, который я могу загрузить из Uri с помощью его метода LoadAsync и нарисовать с помощью метода DrawingSession DrawSvg и его переопределений. Проблема в том, что DrawSvg игнорирует аргумент размера и всегда рисует изображение одинакового размера. Например, внутри сеанса рисования:
float2 symbolSize;
symbolSize.x = 400;//just to experiment
symbolSize.y = 300;
session.DrawSvg(m_test_svg, symbolSize, 100, 100);
Независимо от символа. Размер изображения всегда отображается с одинаковым небольшим размером. Что-то не так с аргументом о размере, или я неправильно понимаю, для чего это нужно? Возможно, это не лучший способ нарисовать SVG в любом случае. Они в увеличенном виде и должны быть прорисованы при любом увеличении.
[Обновить] Я заметил, что у меня был неправильный тип для аргумента размера, он должен быть
winrt::Windows::Foundation::Size symbolSize;
symbolSize.Width = 400;
symbolSize.Height = 300;
session.DrawSvg(m_test_svg, symbolSize,100,100);
Но результаты одинаковы, возможно, поэтому компилятор принимает и то, и другое.
То есть я ожидаю, что Size набирает Float2. Но не должно ли это повлиять на рисунок?
[Обновить] В документе сказано, что аргумент Size относится к размеру окна просмотра, а не к размеру окна просмотра. Возможно, было бы достаточно, если бы кто-то, участвующий в создании этого класса, мог описать назначение аргумента Size в этом вызове - и если он не предназначен для определения размера отображаемого изображения, есть ли другой способ сделать это? Благодарю.
[Обновление] Если быть более точным, то после более подробного изучения: масштабирование этого масштабируемого векторного изображения требует изменения окна просмотра, в то время как аргумент DrawSvg, по-видимому, влияет только на viewPort, то есть часть изображения, которое будет отображаться. Есть ли способ масштабировать изображение больше или меньше? Если нет, я мог бы также использовать pngs. Если вы не можете масштабировать SVG, какой смысл в этом?
[Обновление] Все еще надеемся получить отзыв об этом. В другом месте я слышал, что можно изменить преобразование для всего холста, прежде чем рисовать любой из сотен символов. Пока не выяснили, как это сделать, но возникла другая идея: в перечислении CanvasSvgAspectScaling есть что-то, что было бы уместно: PreserveAspectRatio с соответствующим значением означает «масштабировать окно просмотра до максимума, необходимого для того, чтобы сделать весь вид поле видимым» в окне просмотра. " Похоже, это будет означать: установить размер окна просмотра нужного изображения, установить CanvasSvgAspectScaling, чтобы иметь это перечисляемое значение, а затем svg будет рисовать, чтобы заполнить область просмотра, который является аргументом, предоставленным в CanvasDrawingSession.DrawSvg. Это было бы хорошо, но это не имеет никакого эффекта.