[WindowsPhone] 動態製作圖片至IsolatedStorage,並更新磁貼

2013-08-02

我們來聊一下,有關於如何在App中動態製作一張圖,並且更新現在的磁貼,主要要說的觀念在於如何建立一張圖片,

並且放入置IsolatedStorage之後,讓磁貼還可以讀到那張圖合成出來的圖片,案例說明:

iseeusample2


在 txtMain(TextBox物件) 輸入文字後,會自動更新 tbMainText(TextBlock),之後按下,製作中圖的按鈕,在按下更換Tile後,會把現在系統預設的Tile給更新

首先我們會用到這篇文章(關於Isolated Storage中存取讀取圖片)的概念,將物件拍下來放入置IsolatedStorage中。

C# Code:


/// <summary>
/// 製作縮圖至IsolatedStoarge
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMakeMedium_Click(object sender, RoutedEventArgs e)
{
    //請注意路徑,因為要讓磁貼讀到此圖片路徑 所以你必須放在 \Shared\ShellContent\檔名
    SaveImageToIsolatedStorage(new WriteableBitmap(GridSnap, null), @"\Shared\ShellContent\FlipCycleTileMedium.jpg", 0, 100);
}
 
/// <summary>
/// 存圖片至Isolated Storage
/// </summary>
/// <param name="wb"></param>
/// <param name="fileName"></param>
/// <param name="orientation"></param>
/// <param name="quality"></param>
public static void SaveImageToIsolatedStorage(WriteableBitmap wb, string fileName, int orientation = 0, int quality = 70)
{
    var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
 
    if (isolatedStorage.FileExists(fileName))
        isolatedStorage.DeleteFile(fileName);
    var fileStream = isolatedStorage.CreateFile(fileName);
    wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, orientation, quality);
    fileStream.Close();
 
}

其中請注意路徑,因為要讓磁貼讀到此圖片路徑 所以你必須放在 \Shared\ShellContent\檔名,在其中案例我就是將GridSnap這物件給進行快照,因為她包了圖片還有tbMainText(TextBlock)
再來就是更新磁貼的部分,因為重點不在於介紹磁貼,所以我用最簡單的方式撰寫,相關文章可以參考
MSDN :http://msdn.microsoft.com/en-us/library/windowsphone/design/jj662926(v=vs.105).aspx
Pou http://www.dotblogs.com.tw/pou/archive/2012/12/22/85883.aspx

更新磁貼C# Code:


/// <summary>
/// 置換現在的Tile圖片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnChangeTile_Click(object sender, RoutedEventArgs e)
{
    ShellTile sysTile = ShellTile.ActiveTiles.FirstOrDefault();
 
    var standTile = new StandardTileData();
    standTile.BackgroundImage = new Uri(@"isostore:/Shared/ShellContent/FlipCycleTileMedium.jpg", UriKind.Absolute);
    standTile.Title = "Sample";
    if (sysTile != null) sysTile.Update(standTile);
}

其中請注意,讀取的方式為  isostore:/Shared/ShellContent/檔名,這點必須注意
結果:
iseeusample3

我們換換其他文字:
iseeusample4


iseeusample5

Source:


當麻許的超技八 2014 | Donma Hsu Design.