WP7 - Создание изображения плитки - не может включать мое собственное изображение - PullRequest
0 голосов
/ 11 сентября 2011

Я создаю изображение и использую его в качестве изображения в режиме реального времени, чтобы я мог предоставить больше информации и лучше контролировать его внешний вид.Проблема в том, что, пока я генерирую изображение, все в порядке, оно не включает в себя мое собственное фоновое изображение.

Следующий код работает и прекрасно подхватывает изображение

ShellTile defaultTile = ShellTile.ActiveTiles.First();
defaultTile.Update(new StandardTileData
{
    Title = item2.NextDateTime.ToShortTimeString(),
    BackBackgroundImage = new Uri("Images/Tiles/tilebacking.png", UriKind.Relative),
    BackTitle = item2.NextDateTime.ToShortTimeString(),
    BackContent = item2.Details
});

И все же следующеекод, пока генерация изображения не включает мое исходное изображение (согласно логотипу Var).Я нашел код для этого в Интернете, и он, кажется, работает нормально, за исключением включения моего исходного фонового изображения.

var bmp = new WriteableBitmap(173, 173);
var logo = new BitmapImage(new Uri("Images/Tiles/tilebacking.png", UriKind.Relative));
var img = new Image { Source = logo };

// Force the bitmapimage to load it's properties so the transform will work
logo.CreateOptions = BitmapCreateOptions.None;
var bl = new TextBlock();
bl.Foreground = new SolidColorBrush(Colors.White);
bl.FontSize = 24.0;
bl.Text = "any text we want!";

bmp.Render(bl, null);

var tt = new TranslateTransform();
tt.X = 173 - logo.PixelWidth;
tt.Y = 173 - logo.PixelHeight;

bmp.Render(img, tt);

bmp.Invalidate();
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
    var filename = "/Shared/ShellContent/testtile.jpg";
    using (var st = new IsolatedStorageFileStream(filename, FileMode.Create, FileAccess.Write, store))
    {
        bmp.SaveJpeg(st, 173, 173, 0, 100);
    }
}


ShellTile defaultTile = ShellTile.ActiveTiles.First();

defaultTile.Update(new StandardTileData
{
    Title = item2.NextDateTime.ToShortTimeString(),
    BackgroundImage = new Uri("isostore:/Shared/ShellContent/testtile.jpg", UriKind.Absolute),
    BackBackgroundImage = new Uri("isostore:/Shared/ShellContent/testtile.jpg", UriKind.Absolute),
    BackTitle = item2.NextDateTime.ToShortTimeString(),
    BackContent = item2.Details
});

Есть ли что-то очевидное, что я делаю не так здесь.Это тот же файл и тот же путь к файлу, который отлично работает в первом примере.

Спасибо.

1 Ответ

3 голосов
/ 12 сентября 2011

Вам необходимо использовать событие BitmapImage.ImageOpened , чтобы обеспечить правильное отображение.

Это означает, что вы должны написать свой код следующим образом:

var logo = new BitmapImage(new Uri("Images/Tiles/tilebacking.png", UriKind.Relative));
logo.CreateOptions = BitmapCreateOptions.None;
logo.ImageOpened += (sender, e) =>
{
    var bmp = new WriteableBitmap(173, 173);

    var bl = new TextBlock();
    bl.Foreground = new SolidColorBrush(Colors.White);
    bl.FontSize = 24.0;
    bl.Text = "any text we want!";

    bmp.Render(bl, null);

    var tt = new TranslateTransform();
    tt.X = 173 - logo.PixelWidth;
    tt.Y = 173 - logo.PixelHeight;

    bmp.Render(img, tt);

    bmp.Invalidate();

    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        var filename = "/Shared/ShellContent/testtile.jpg";
        using (var st = new IsolatedStorageFileStream(filename, FileMode.Create, FileAccess.Write, store))
        {
            bmp.SaveJpeg(st, 173, 173, 0, 100);
        }
    }

    ...
}

Я написал руководство по этому вопросу: Как: создать собственную живую плитку прямо на телефоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...