Windows phone 8 WP8获取媒体库中图像的URI

Windows phone 8 WP8获取媒体库中图像的URI,windows-phone-8,uri,longlistselector,media-library,Windows Phone 8,Uri,Longlistselector,Media Library,由于我使用自己的LongListSelector让用户从图像中进行选择,因此我需要检索Medialibrary中所有图像的URI。我还找不到做这件事的任何可能性 我所看到的可能是得到图像的名称: MediaLibrary m = new MediaLibrary(); foreach (var r in m.Pictures) { Stream imageStream = r.GetImage(); } 我怎样才能走完剩下的路 编辑 遵循第一种解决方案: Gallery.xaml

由于我使用自己的LongListSelector让用户从图像中进行选择,因此我需要检索
Medialibrary
中所有图像的URI。我还找不到做这件事的任何可能性

我所看到的可能是得到图像的名称:

MediaLibrary m = new MediaLibrary();

foreach (var r in m.Pictures)
{
    Stream imageStream = r.GetImage();
}
我怎样才能走完剩下的路

编辑

遵循第一种解决方案:

Gallery.xaml


Gallery.xaml.cs

    private List<WriteableBitmap> _listOfImages = new List<WriteableBitmap>();

    public List<WriteableBitmap> ListOfImages
    {
        get { return _listOfImages; }

        set { _listOfImages = value; }
    }

    public Gallery()
    {
        InitializeComponent();

        var ml = new MediaLibrary();
        var Pictures = ml.Pictures;
        foreach (var item in Pictures)
        {
            ListOfImages.Add(PictureDecoder.DecodeJpeg(item.GetImage()));
        }

    }
private List\u listOfImages=new List();
公共图像列表
{
获取{return\u listOfImages;}
设置{u listOfImages=value;}
}
公众席()
{
初始化组件();
var ml=新媒体库();
var图片=ml图片;
foreach(图片中的变量项)
{
添加(PicturedCoder.DecodeJpeg(item.GetImage());
}
}

导致不显示图像。调试器显示imageas已正确添加到我的列表中,但我看不到任何内容。

为什么需要该路径?显示图像?如果只需要在列表中将图像显示为缩略图,则可以使用流创建
位图图像

var bi = new BitmapImage();
bi.SetSource(r.GetThumbnail());

现在您可以将
bi
设置为
图像。Source

为什么需要路径?显示图像?如果只需要在列表中将图像显示为缩略图,则可以使用流创建
位图图像

var bi = new BitmapImage();
bi.SetSource(r.GetThumbnail());

现在您可以将
bi
设置为
图像。Source

似乎API没有公开从媒体库返回的图片的URI属性。所以你需要用不同的方法来做。例如,您可以有一个
writeablebitmap
s列表,而不是URI列表:

private List<WriteableBitmap> _listOfImages = new List<WriteableBitmap>();
public List<WriteableBitmap> ListOfImages
{
    get { return _listOfImages; }

    set { _listOfImages = value; }
}
.......
.......
var ml = new MediaLibrary();            
var Pictures = ml.Pictures;
foreach (var item in Pictures)
{
    ListOfImages.Add(PictureDecoder.DecodeJpeg(item.GetImage()));
}
........
//in XAML
<phone:LongListSelector ItemsSource="{Binding ListOfImages}"> 
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Image Width="150" Height="150" 
                                Source="{Binding}"/> 
            </StackPanel>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
........
</phone:LongListSelector>
........
private List\u listOfImages=new List();
公共图像列表
{
获取{return\u listOfImages;}
设置{u listOfImages=value;}
}
.......
.......
var ml=新媒体库();
var图片=ml图片;
foreach(图片中的变量项)
{
添加(PicturedCoder.DecodeJpeg(item.GetImage());
}
........
//在XAML中
........
........

[代码改编自]

API似乎没有公开从媒体库返回的图片的URI属性。所以你需要用不同的方法来做。例如,您可以有一个
writeablebitmap
s列表,而不是URI列表:

private List<WriteableBitmap> _listOfImages = new List<WriteableBitmap>();
public List<WriteableBitmap> ListOfImages
{
    get { return _listOfImages; }

    set { _listOfImages = value; }
}
.......
.......
var ml = new MediaLibrary();            
var Pictures = ml.Pictures;
foreach (var item in Pictures)
{
    ListOfImages.Add(PictureDecoder.DecodeJpeg(item.GetImage()));
}
........
//in XAML
<phone:LongListSelector ItemsSource="{Binding ListOfImages}"> 
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Image Width="150" Height="150" 
                                Source="{Binding}"/> 
            </StackPanel>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
........
</phone:LongListSelector>
........
private List\u listOfImages=new List();
公共图像列表
{
获取{return\u listOfImages;}
设置{u listOfImages=value;}
}
.......
.......
var ml=新媒体库();
var图片=ml图片;
foreach(图片中的变量项)
{
添加(PicturedCoder.DecodeJpeg(item.GetImage());
}
........
//在XAML中
........
........

[代码改编自]

似乎解码工作正常,但我的列表中没有显示任何内容。我会根据您的回答更新我的问题。UI似乎不会随着ListOfImages属性的填充而更新。要解决这个问题,请尝试以下两种方法之一:1.将
列表
更改为
可观察到的收集
或2。放置
初始化组件()
foreach
块之后。同时尝试了这两种方法,但没有在此部分中使用resultdatabinding:
ItemsSource={Binding ListOfImages}
需要DataContext。尝试添加
this.DataContext=this中(在
InitializeComponents();
行之后的某个地方)。我现在需要将所选图片存储到IsolatedStorage中。我怎么能做到呢?似乎解码工作正常,但我的列表中没有显示任何内容。我会根据您的回答更新我的问题。UI似乎不会随着ListOfImages属性的填充而更新。要解决这个问题,请尝试以下两种方法之一:1.将
列表
更改为
可观察到的收集
或2。放置
初始化组件()
foreach
块之后。同时尝试了这两种方法,但没有在此部分中使用resultdatabinding:
ItemsSource={Binding ListOfImages}
需要DataContext。尝试添加
this.DataContext=this中(在
InitializeComponents();
行之后的某个地方)。我现在需要将所选图片存储到IsolatedStorage中。我该怎么做?是的,我想在我的长列表中显示它。见我编辑的问题。因为我想让用户在另一个页面中编辑图片,所以我首先希望以字符串形式传递路径。但我想我必须将图像保存到隔离存储中,在视图模型中,您可以保留
BitmapImage
和图像路径。然后将该路径传递到编辑页面。另外,不要使用
GetImage
,而是使用
GetThumbail
。是的,我想在我的长列表选择器中显示它。见我编辑的问题。因为我想让用户在另一个页面中编辑图片,所以我首先希望以字符串形式传递路径。但我想我必须将图像保存到隔离存储中,在视图模型中,您可以保留
BitmapImage
和图像路径。然后将该路径传递到编辑页面。另外,不要使用
GetImage
,而是使用
GetThumbail