Можно ли добавить SVG в MapIcon.Image для отображения в элементе управления карты UWP? - PullRequest
0 голосов
/ 26 июня 2018

Я могу добавлять изображения PNG без проблем, чтобы изменить изображение MapIcon по умолчанию, но как только я пытаюсь использовать SVG, происходит сбой приложения с выходом «application.exe с кодом -529697949 (0xe06d7363)« Исключение Microsoft C ++ ».

Мне известен класс SvgImageSource, и я могу использовать этот штраф в других областях приложения для рендеринга изображения SVG, однако при попытке добавить SVG в MapIcon.Image; который имеет тип IRandomAccessStreamReference, он не работает. Мне просто интересно, является ли это ограничением API и нужно ли мне просто использовать растровые изображения, а не SVG, когда дело доходит до отображения пользовательских изображений на MapIcon?

Я добавил пример быстрого провала ниже.

MainPage.xaml:

<Page xmlns:my="using:Windows.UI.Xaml.Controls.Maps" 
    x:Class="TestMapWithSVGForMapIcon.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <my:MapControl Loaded="{x:Bind _viewModel.AddMapIcon}"/>
    </Grid>
</Page>

MainPage.xaml.cs:

public sealed partial class MainPage : Page
{
    private MainViewModel _viewModel;

    public MainPage()
    {
        InitializeComponent();

        _viewModel = new MainViewModel();
        DataContext = _viewModel;
    }
}

MainViewModel.cs:

public class MainViewModel
{
    protected MapControl Map { get; set; }

    public void AddMapIcon(object sender, RoutedEventArgs e)
    {
        if (sender is MapControl map)
        {
            Map = map;
        }

        var mapIcon = new MapIcon
        {
            Location = new Geopoint(new BasicGeoposition()
            {
                Latitude = 53.795452,
                Longitude = -4.304733
            }),
            //works Ok with .png files
            Image = RandomAccessStreamReference.CreateFromUri(new Uri($"ms-appx:///Assets/Hazard_H1.svg")),              
        };

        Map.MapElements.Add(mapIcon);    
    }
}

1 Ответ

0 голосов
/ 26 июня 2018

Нет, SVG не является поддерживаемым типом потока для MapIcon. Изображение Вы можете использовать поток, содержащий закодированное растровое изображение в формате PNG или JPG, или необработанный массив байтов в формате RGB.

...