首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从独立存储中为二级磁贴加载图像

如何从独立存储中为二级磁贴加载图像
EN

Stack Overflow用户
提问于 2012-08-20 10:40:55
回答 3查看 2.9K关注 0票数 1

我正在尝试用从PhotoChooserTask保存的图像来填充二级瓷砖背景,但由于某些原因,我无法完成此操作。我参考了很多网站,但我还没有找到合适的实现。我所要做的就是调用PhotoChooserTask,然后在完成的事件中,我将结果图像保存到独立存储中,以便稍后加载。这对我的应用程序中的HubTile有效,但由于某些原因,我无法将图像附加到辅助磁贴。到目前为止,我所掌握的情况如下:

MainPage.xaml.cs

代码语言:javascript
运行
复制
string imageFolder = @"\Shared\ShellContent";
string shareJPEG = "shareImage.jpg";

public MainPage()
    {
        InitializeComponent();

        photoChooserTask = new PhotoChooserTask();
        photoChooserTask.Completed += new EventHandler<PhotoResult>(photoChooserTask_Completed);
    }

public void changePictureMenuItem_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {     
        try
        {
            photoChooserTask.Show();
        }
        catch (System.InvalidOperationException)
        {
            MessageBox.Show("An error occurred");
        }
    }

    void photoChooserTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
              //persist the data in isolated storage
                    using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        if(!myIsolatedStorage.DirectoryExists(imageFolder))
                        {
                            myIsolatedStorage.CreateDirectory(imageFolder);
                        }

                        if (myIsolatedStorage.FileExists(shareJPEG))
                        {
                            myIsolatedStorage.DeleteFile(shareJPEG);
                        }

                        string filePath = System.IO.Path.Combine(imageFolder, shareJPEG);
                        IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(filePath);

                        BitmapImage bitmap = new BitmapImage();
                        bitmap.SetSource(e.ChosenPhoto);
                        WriteableBitmap wb = new WriteableBitmap(bitmap);

                        // Encode WriteableBitmap object to a JPEG stream. 
                        Extensions.SaveJpeg(wb, fileStream, 173, 173, 0, 100);

                        fileStream.Close();
                    }
        }
    }    

private void CreateLiveTile(TileItem item)
    {
        //IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
        var title = item.Title.ToString();
        string tileParameter = "Param=" + item.Title.ToString();

        ShellTile Tile = CheckIfTileExist(tileParameter);  // Check if Tile's title has been used             

        if (Tile == null)
        {   
            //this is not working?             
            background = new Uri(@"isostore:/Shared/ShellContent/shareJPEG.png", UriKind.Absolute);
            //background = new Uri("isostore:/Shared/ShellContent/shareJPEG.png", UriKind.Absolute);

            try
            {
                var LiveTile = new StandardTileData
                {
                    Title = item.TileName,                        
                    BackgroundImage = background,  //not working
                    BackTitle = item.TileName,    
                    BackBackgroundImage = new Uri("/background.png", UriKind.Relative),
                    BackContent = item.Message,
                };

                ShellTile.Create(new Uri("/MainPage.xaml?" + tileParameter, UriKind.Relative), LiveTile);                      
        }
    }

最终,创建了第二个磁贴,但没有用于BackgroundImage的图像。如何正确调用隔离存储路径来相应地设置二级瓦片的BackgroundImage?或者还有其他我应该做或改变的事情吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-21 00:30:41

MainPage.xaml.cs

代码语言:javascript
运行
复制
string imageFolder = @"\Shared\ShellContent"; 
string shareJPEG = "shareImage.jpg"; 

...

private void CreateLiveTile(TileItem item)  
{   
    var title = item.Title.ToString();  
    string tileParameter = "Param=" + item.Title.ToString();  

    ShellTile Tile = CheckIfTileExist(tileParameter);  // Check if Tile's title has been used               

    if (Tile == null)  
    {        
        string filePath = System.IO.Path.Combine(imageFolder, shareJPEG);                
        background = new Uri(@"isostore" + filePath, UriKind.Absolute);    //this worked

        ...

     }
}
票数 2
EN

Stack Overflow用户

发布于 2012-08-20 14:29:38

您确定镜像保存成功且存在吗?您将其另存为jpeg,但引用了png文件。尝试@"\Shared\ShellContent\shareJPEG.png“

票数 1
EN

Stack Overflow用户

发布于 2015-08-11 17:40:16

首先,您应该将您的图像放在"\Shared\ShellContent“位置。您可以使用.png或.jpg文件

代码语言:javascript
运行
复制
string imageFolder = @"\Shared\ShellContent"; 
string shareJPEG = "shareImage.jpg"; 

...

private void CreateLiveTile(TileItem item)  
{   
    var title = item.Title.ToString();  
    string tileParameter = "Param=" + item.Title.ToString();  

    ShellTile Tile = CheckIfTileExist(tileParameter);

    if (Tile == null)  
    {        
        string filePath = System.IO.Path.Combine(imageFolder, shareJPEG);
        using (var iso = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (iso.FileExists(filePath)) // check file exist or not
                        background = new Uri(@"isostore:" + filePath, UriKind.Absolute); 
                } 
        ...

     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12031730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档