加载列表框图像的确切方法

时间:2013-08-21 06:22:04

标签: windows-phone-7

我正在开发一个Windows手机应用程序,我从媒体库中收集图像并将每个项目添加到列表框中。这是我的代码....

public MainPage()
{
InitializeComponent();
getImages();

}
public void getImages()
{
try
{
    MediaLibrary mediaLibrary = new MediaLibrary();
    var pictures = mediaLibrary.Pictures;
    foreach (var picture in pictures)
    {
        BitmapImage image = new BitmapImage();
        image.SetSource(picture.GetImage());//out of memory exception
        img mediaImage = new img();
        mediaImage.Imgs = image;
        imageList.Items.Add(mediaImage);
    }
}
catch (Exception ex)
{

}

}

public class img
{
public img()
{ }
public BitmapImage Imgs { get; set; }
}

在Xaml ......

<ScrollViewer Name="sc" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden" Margin="0,422,0,43">
    <ListBox Name="imageList" SelectionChanged="imageList_SelectionChanged_1" Height="126">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate >
                <StackPanel Orientation="Horizontal"></StackPanel>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate >
                <StackPanel Orientation="Horizontal">
                <Image Margin="10" Name="image1" Source="{Binding Imgs}" Height="150" Width="150"></Image>
                    </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</ScrollViewer>

当我加载此列表框时,我在Picture.GetImage()中出现内存不足异常 我已经用代码编写了。请告诉我如何释放内存。

1 个答案:

答案 0 :(得分:0)

Win32往往会丢失无效图像文件的内存异常。不确定WP7是否仍然如此。

所以让我们假设情况并非如此 - 仅针对单个特定图像抛出异常?或者当你已经加载了一些图像时,它会被抛出,使它成为真正的“内存不足”状态?

如果是后者:您不想将所有图像加载到列表框中 - 用户可能有数千张图片。您可能希望加载缩略图 - 在这种情况下,您可以调用GetThumbnail方法。您还应该限制加载的缩略图的数量和/或使用(重新)虚拟化,延迟加载ListBox和/或观察可用的RAM以停止加载更多缩略图。