簡體   English   中英

在WPF / Surface SDK的圖像控件中加載高分辨率圖像

[英]Loading high resolution images in image control for WPF/Surface SDK

我有從Web服務器獲得的高分辨率圖像的列表。 我需要在Surface SDK scatterview項目中填充它們。 為了顯示圖像,我對每個圖像使用圖像控件。

代碼邏輯:
用戶具有放置在桌面上的身份標簽,該身份標簽將獲取與該標簽關聯的高分辨率圖像的列表。 圖像的獲取在后台運行,以避免卡住UI。 在后台獲取JPEG圖像的代碼是

public BitmapSource FetchImage(string URLlink)
    {
        JpegBitmapDecoder decoder = null;
        BitmapSource bitmapSource = null;
        try
        {
            decoder = new JpegBitmapDecoder(new Uri(URLlink, UriKind.Absolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
        }
        catch (Exception)
        {
            decoder = new JpegBitmapDecoder(new Uri("pack://application:,,,/Resources/ImageNotFound.jpg", UriKind.RelativeOrAbsolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnDemand);
        }
        finally
        {
            bitmapSource = decoder.Frames[0];
            bitmapSource.Freeze();
        }
        return bitmapSource;
    }

圖像從服務器下載並顯示在圖像控件中。 但是,會嚴重影響性能,並且加載超過10張圖像時,應用程序會掛起。 對於低分辨率圖像,我什至可以加載20-30張圖像而不會掛起或拖慢應用程序。

由於我讀取的圖像控制默認算法為Fant,因此嘗試將渲染屬性更改為HighQuality。 應用程序仍然掛起,但任何低於此值的應用程序都將扼殺擁有用於顯示的高分辨率圖像的整個想法。

RenderOptions.SetBitmapScalingMode(mic.ItemImage, BitmapScalingMode.HighQuality);

有沒有更好的方式加載圖像。 我正在考慮先將圖像保存到硬盤,然后再加載到圖像源。 這樣對提高性能有效嗎,因為我在考慮直接從URL加載圖像時會將其存儲在內存中,最終用完。 通過首先保存圖像,我可能會避免這種情況,但是.NET實際上可能會執行相同的操作,即先將其存儲在臨時文件中,然后再加載。

我還嘗試將BitmapCacheOption更改為所有可用選項,但並沒有任何改善。

scatterView無法處理很多圖像。 例如,嘗試用一種單色的1000矩形填充它。 這會使應用程序變慢。 無法解決該問題,Microsoft必須重新編碼ScatterView。 但是,您可以取消激活scatterView上的某些效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM