Динамическое изображение, назначенное живой плитке, не отображается?

1

У меня есть приложение для Windows Store, написанное на С#, которое работает с фотографиями. Я хочу показать последнюю фотографию, которую пользователь выбрал в приложении в живом фрагменте среднего размера (150 x 150). Для этого я использую код ниже. Когда я запускаю приложение, я не получаю никаких ошибок, но я не вижу выбранную фотографию в живой фрагменте. Я знаю, что делаю по крайней мере некоторые вещи. Я говорю это, потому что, если пользователь еще не выбрал фотографию, я покажу тестовое изображение, и я вижу это изображение в плитке. Но тестовое изображение происходит из пакета приложения, используя протокол ms-appx, а не из области хранения приложений.

Я нашел несколько сообщений SO по этому вопросу, но все они предназначены для Windows Phone. Я просмотрел список KnownFolders для файлов приложений Windows Store, но ничего не отображалось в папке SharedContent, необходимой для файлов, предназначенных для использования в реальном времени в Windows Phone. Что не так с моим кодом?

Обратите внимание, что вызов vvm.ActiveVideomark.GetThumbnail() просто извлекает растровое изображение как объект WriteableBitmap. Как вы можете видеть в коде, я изменяю размер изображения до размера, необходимого для средней живой плитки (150 x 150). ToJpegFileAsync() - это метод расширения, который кодирует объект WriteableBitmap для jpeg-байтов, а затем записывает эти байты в файл с использованием указанного имени файла. Насколько я знаю, оба этих вызова хорошо проверены и не являются источником проблемы.

        TileUpdateManager.CreateTileUpdaterForApplication().Clear();
        TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true);

        var tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150Image);

        var tileImage = tileXml.GetElementsByTagName("image")[0] as XmlElement;

        // Got a current photo?
        if (vvm.ActiveVideomark == null)
            // No, just show the regular logo image.
            tileImage.SetAttribute("src", "ms-appx:///Assets/Logo.scale-100.png");
        else
        {
            // Resize it to the correct size.
            WriteableBitmap wbm = await vvm.ActiveVideomark.GetThumbnail();
            WriteableBitmap wbm2 = wbm.Resize(150, 150, WriteableBitmapExtensions.Interpolation.Bilinear);

            // Write it to a file so we can pass it to the Live Tile.
            string jpegFilename = "LiveTile1.jpg";
            StorageFile jpegFile = await wbm2.ToJpegFileAsync(jpegFilename);

            // Yes, show the selected image.
            tileImage.SetAttribute("src", jpegFile.Path);
        }
Теги:
windows-store-apps
windows-runtime
live-tile

1 ответ

3
Лучший ответ

Атрибут src должен содержать URI с параметрами ms-appx:///, ms-appdata:///local или http [s]://. Свойство StorageFile.Path, поскольку вы используете с jpegFile.Path, является локальной файловой системой, такой как c:\users\Robert\AppData..., которая недействительна. Поэтому создайте свои изображения в локальных приложениях, а затем используйте ms-appdata:///local/, чтобы ссылаться на них в полезных данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню