相关疑难解决方法(0)

当我在ListBox中有图像时,为什么会出现OutOfMemoryException?

我想在我的自定义库中显示存储在Windows Phone 8照片文件夹中的所有图像,该图库ListBox用于显示图像.

ListBox代码如下:

    <phone:PhoneApplicationPage.Resources>
        <MyApp:PreviewPictureConverter x:Key="PreviewPictureConverter" />
    </phone:PhoneApplicationPage.Resources>

    <ListBox Name="previewImageListbox" VirtualizingStackPanel.VirtualizationMode="Recycling">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel CleanUpVirtualizedItemEvent="VirtualizingStackPanel_CleanUpVirtualizedItemEvent_1">
                </VirtualizingStackPanel>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Image Source="{Binding Converter={StaticResource PreviewPictureConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
     </ListBox>
Run Code Online (Sandbox Code Playgroud)

使用以下转换器:

public class PreviewPictureConverter : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        PreviewImageItem c = value as PreviewImageItem;
        if (c == null)
            return null;
        return c.ImageData;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) …
Run Code Online (Sandbox Code Playgroud)

c# listbox out-of-memory photo-gallery windows-phone-8

27
推荐指数
2
解决办法
1万
查看次数

图像源和缓存

我使用以下代码显示来自网络服务器的图像:

   <Image Source="{Binding Url}" />
Run Code Online (Sandbox Code Playgroud)

图像会自动下载,我假设还有一些基于Url的缓存.

我的问题是,当应用程序处于脱机状态时,可能无法显示缓存的图像.

有没有办法改变缓存行为,以便在没有网络可用时加载图像?有关缓存的文档指针也非常有用.

c# windows-phone windows-runtime windows-phone-8

13
推荐指数
2
解决办法
2万
查看次数

找不到内存泄漏

我一直在研究WP7应用程序,它的图像库应用程序,实现了基本的缩放和轻弹手势.

出于测试目的,我使用设置为Content的离线图像(它们的文件名已编号)编译应用程序,并通过硬编码字符串(稍后将替换)访问它们.

但后来意识到应用消耗了大量内存.我以为这是由于图像并发现了这个博客 ; 图像总是缓存.我使用博客中的代码来纠正这个问题.虽然消费率确实下降,但仍未释放内存.

为了最后的尝试,我创建了另一个带有基本功能2按钮的测试应用程序,用于图像的导航和图像控制,只是为了确保它不是我的手势代码可能是问题.

这是xaml

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Image Grid.Row="0" x:Name="ImageHolder" Height="Auto" Width="Auto" Stretch="Uniform" Tap="image_Tap" />
    <TextBlock x:Name="MemUsage" />
    <StackPanel Grid.Row="1" Orientation="Horizontal">
        <Button x:Name="PrevButton" Content="Prev" Width="240" Click="btnPrev_Click"/>
        <Button x:Name="NextButton" Content="Next" Width="240" Click="btnNext_Click"/>
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

这是.cs文件

    const int PAGE_COUNT = 42;
    int pageNum = 0;
    public MainPage()
    {
        InitializeComponent();
        RefreshImage();
    }

    private void btnPrev_Click(object sender, RoutedEventArgs e)
    {
        pageNum = (PAGE_COUNT + pageNum - 1) % PAGE_COUNT; // cycle to …
Run Code Online (Sandbox Code Playgroud)

c# memory memory-leaks image windows-phone-7

9
推荐指数
1
解决办法
3462
查看次数

Windows Phone图像网格"内存不足"错误

当我尝试显示图像网格时,我在Windows手机上有"内存不足"异常.我玩了一点代码,认为这Grid.Children.Add给了我那个错误.

我创建了自定义类,显示灰色矩形,加载图像后,它显示图像而不是该矩形.这里是:

   class ImageWIthLoader
   {
     private BitmapImage m_loader_bitmap;
     private BitmapImage m_source_bitmap;
     private Image m_image;

     public Image image
     {
         get { return m_image; }
     }

     //url - url to 120x120 image; width, height = 120 both
     public ImageWIthLoader(string url, int width, int height)
     {
         m_image = new Image();

         m_loader_bitmap = new BitmapImage(new Uri("Assets/Images/image_await_background.png", Uri Kind.Relative));
         m_loader_bitmap.DecodePixelWidth = width;
         m_loader_bitmap.DecodePixelHeight = height;

         m_image.Source = m_loader_bitmap;

         m_source_bitmap = new BitmapImage(new Uri(url));
         m_source_bitmap.CreateOptions = BitmapCreateOptions.None;
         m_source_bitmap.ImageOpened += bitmapLoaded;
     }

     private void bitmapLoaded(object …
Run Code Online (Sandbox Code Playgroud)

c# xaml out-of-memory windows-phone-8

0
推荐指数
1
解决办法
292
查看次数