gpt4 book ai didi

c# - 使用 "isostore:/"方案从 XAML 中的独立存储访问图像

转载 作者:太空狗 更新时间:2023-10-30 00:41:54 25 4
gpt4 key购买 nike

我已经从 Web 下载图像并将它们保存到独立存储,现在我想访问我的 XAML 文件中的这些图像,并提供一个 Uri 作为对它们的引用。

我已经用 IsoStoreSpy 验证它们是否正确存储在我期望的位置,如果我打开文件并读入字节流,我可以从它们创建 BitmapImages。但现在我想通过仅将一个 Uri 从我的模型传递到 IsolatedStorage 位置并让我的 XAML 加载图像来优化我的图像处理。

<Image Height="120" Width="120" Stretch="Uniform" HorizontalAlignment="Left">
<Image.Source>
<BitmapImage UriSource="{Binding PodcastLogoUri}" DecodePixelHeight="120" DecodePixelWidth="120" />
</Image.Source>
</Image>

这是绑定(bind)到 BitmapImage.UriSource 的 PodcastLogoUri Uri 值:

"isostore:/PodcastIcons/258393889fa6a0a0db7034c30a8d1c3322df55696137611554288265.jpg"

这是我构建它的方式:

public Uri PodcastLogoUri
{
get
{

Uri uri = new Uri(@"isostore:/" + PodcastLogoLocation);
return uri;
}
}

我仍然无法在我的 UI 中看到图像。我确定图片位于 PodcastLogoLocation

在 Windows Phone 8 中是否应该可以像这样从隔离存储中将图像引用到 UI?我究竟做错了什么?

编辑:如果我直接使用相同的路径创建 BitmapImage 并在 XAML 中使用 BitmapImage,它工作正常并且我可以看到我期望在那里看到的图像:

<Image Height="120" Source="{Binding PodcastLogo}"  Width="120" Stretch="Uniform" HorizontalAlignment="Left"/>
 public BitmapImage PodcastLogo
{
get
{
Stream stream = null;
BitmapImage logo = new BitmapImage();
using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isoStore.FileExists(PodcastLogoLocation))
{
stream = isoStore.OpenFile(PodcastLogoLocation, System.IO.FileMode.Open, FileAccess.Read);
try
{
logo.SetSource(stream);
}
catch (Exception e)
{
}

}
}

return logo;
}
}

最佳答案

我想我已经完成了与您尝试做的完全相同的事情。我发现的是独立存储使用 IsolatedStorageFile.GetUserStoreForApplication() 存储文件的绝对位置.这类似于 "C:/Data/Users/DefApps/AppData/<App Product ID>/Local/<YourFile.png>" ;

我已经在 Windows Phone 8 上测试了这个解决方法,它对我有用...

<强>1。 XAML

<Image Width="40">
<Image.Source>
<BitmapImage DecodePixelWidth="40" DecodePixelHeight="40" UriSource="{Binding Path=Icon}" />
</Image.Source>
</Image>

<强>2。 View 模型

private string _icon;
public string Icon
{
get
{
return _icon;
}
set
{
if (value != _icon)
{
_icon = value;
NotifyPropertyChanged("Icon");
}
}
}

<强>3。加载数据

filename = "Myicon.png";

IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
if (!store.FileExists(filename))
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(filename, FileMode.Create, FileAccess.Write, store))
stream.Write(imgBytes, 0, imgBytes.Length);
}

//get Product ID from manifest. Add using System.Linq; if you haven't already
Guid productId = new Guid((from manifest in System.Xml.Linq.XElement.Load("WMAppManifest.xml").Descendants("App") select manifest).SingleOrDefault().Attribute("ProductID").Value);
string storeFile = "C:/Data/Users/DefApps/AppData/" + productId.ToString("B") + "/Local/" + filename;

this.Items.Add(new MyViewModel() { Icon = storeFile });

关于c# - 使用 "isostore:/"方案从 XAML 中的独立存储访问图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18161143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com