2011-09-11 6 views
0

イメージを生成し、これをライブ画像として使用して、より多くの情報を提供し、見た目をより詳細に制御できるようにします。 問題は私がイメージを生成している間、それは自分自身の背景イメージを含まないことです。WP7 - タイルイメージを生成する - 自分のイメージを含めることはできません

次のコードは動作し、(Varのロゴあたりなど)私の最初の画像を含むされていない画像を生成しながら、しかし、次のコード

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 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 
}); 

ここで間違っていることが明らかですか?これは、最初の例でうまく動作する同じファイルと同じファイルパスです。

ありがとうございました。

答えて

3

正しく描画されるように、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); 
     } 
    } 

    ... 
} 

は私が主題のガイドを書いている:How To: Generate a custom live tile directly on the phone.

+0

クラウス - 本当にありがとうございました。私はあなたのプロジェクトをWindowsPhoneGeekサイトを介してここで言及し、昨夜遅くにダウンロードしました。それが私の答えを提供することを期待しました。 – Peter

+0

はい - それは今働いています。あなたのガイドは素晴らしいです。ありがとう – Peter

+0

このソリューションはローカルイメージで動作しますが、隔離されたストレージからイメージを使用できますか?最初の行を次のコードに変更しても機能しません: 'var logo = new BitmapImage(new Uri(" isostore:/Shared/ShellContent/abc.jpg "));' –

関連する問題