国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

深入分析WPF客戶端讀取高清圖片卡以及縮略圖的解決方法詳解

2020-01-24 03:21:24
字體:
來源:轉載
供稿:網友
在Ftp上傳上,有人上傳了高清圖片,每張圖片大約2M。
如果使用傳統的BitmapImage類,然后綁定 Source 屬性的方法,有些電腦在首次會比較卡,一張電腦10秒,4張大約會卡40秒。

所以我先異步的下載圖片,得到downloadFileStream對象,然后綁定到BitmapImage類上。例如:
System.Windows.Controls.Image photo = new Image
{
    Width = 100,
    Height = 100,
    Margin = new Thickness(2),
    Stretch = Stretch.Uniform
};

BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = downloadFileStream;
bitmap.EndInit();

photo.Source = bitmap;

ListBoxItem lbi = new ListBoxItem()
{
    DataContext = pvo,
    Content = photo
};

this.lbPhotoes.Items.Add(lbi);

因為bitmap的StreamSource比較大,造成lbi對象比較大,所以lbPhotoes.Items.Add 方法在添加了兩張圖片之后就會卡大約30秒的時間。

所以嘗試使用縮略圖的方式來使BitmapImage的對象變小,在這里采用縮略圖是因為客戶端需要圖片大小大致是
(100,100)。

完整的代碼如下:
System.Windows.Controls.Image photo = new Image
{
    Width = 100,
    Height = 100,
    Margin = new Thickness(2),
    Stretch = Stretch.Uniform
};

using (System.Drawing.Image drawingImage = System.Drawing.Image.FromStream(downloadFileStream))
{
using (System.Drawing.Image thumbImage =
drawingImage.GetThumbnailImage(100, 100, () => { return true; }, IntPtr.Zero))
    {
        MemoryStream ms = new MemoryStream();
        thumbImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

        BitmapFrame bf = BitmapFrame.Create(ms);
        photo.Source = bf;
    }
}

ListBoxItem lbi = new ListBoxItem()
{
    DataContext = pvo,
    Content = photo
};

this.lbPhotoes.Items.Add(lbi);

在這里,要引用System.Drawing.dll.使用System.Drawing.Image 類的GetThumbnailImage 方法來獲取thumbImage,接著使用MemoryStream來保存縮略圖的stream,接著用縮略圖的stream來生成圖片了。

 
最后說一句:雖然解決了這個問題,不過每次都要下載高清圖片,生成縮略圖,這是很耗時的,所以在上傳圖片的時候就應該生成縮略圖了,將縮略圖保存起來了。因為在局域網中,網速比較快,這種方式基本也可以滿足要求了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安达市| 宣威市| 清流县| 宣化县| 竹溪县| 衡水市| 陕西省| 京山县| 游戏| 徐汇区| 隆尧县| 松溪县| 都昌县| 新田县| 吴堡县| 会宁县| 灵山县| 海口市| 东明县| 宜丰县| 庆安县| 西乡县| 梧州市| 鞍山市| 游戏| 漳平市| 八宿县| 隆回县| 宁河县| 平顶山市| 青冈县| 子长县| 武邑县| 天津市| 格尔木市| 石嘴山市| 克拉玛依市| 临江市| 达拉特旗| 深水埗区| 邓州市|