0

当我使用自己的 LongListSelector 让用户从图像中进行选择时,我需要检索Medialibrary. 我还找不到这样做的任何可能性。

我所看到的只是获取图像的名称:

MediaLibrary m = new MediaLibrary();

foreach (var r in m.Pictures)
{
    Stream imageStream = r.GetImage();
}

我怎样才能得到剩下的路径?

编辑

按照第一个解决方案:

图库.xaml

 <phone:LongListSelector 
                x:Name="GalleryLLS"
                LayoutMode="Grid" 
                GridCellSize="108,108"
                SelectionChanged="GalleryLLS_SelectionChanged"
                Margin="0,0,144,12"
                ItemsSource="{Binding ListOfImages}" >
                <phone:LongListSelector.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Image Width="150" Height="150" 
                                Source="{Binding}"/>
                        </StackPanel>
                    </DataTemplate>
                </phone:LongListSelector.ItemTemplate>
            </phone:LongListSelector>

图库.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()));
        }

    }

导致不显示图像。调试器显示 imageas 已正确添加到我的列表中,但我什么也看不到。

4

2 回答 2

2

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

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

现在您可以将其设置biImage.Source.

于 2014-02-26T12:13:30.410 回答
2

似乎 API 没有公开从媒体库返回的图片的 URI 属性。所以你需要用不同的方法来做。例如,您可以使用WritableBitmaps 列表而不是 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>
........

[代码改编自http://www.neelesh-vishwakarma.com ]

于 2014-02-26T12:16:09.923 回答