国产探花免费观看_亚洲丰满少妇自慰呻吟_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來生成圖片了。

 
最后說一句:雖然解決了這個問題,不過每次都要下載高清圖片,生成縮略圖,這是很耗時的,所以在上傳圖片的時候就應該生成縮略圖了,將縮略圖保存起來了。因為在局域網中,網速比較快,這種方式基本也可以滿足要求了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹿泉市| 三河市| 安多县| 夹江县| 甘德县| 阆中市| 固阳县| 肥西县| 浏阳市| 田林县| 略阳县| 贵溪市| 太白县| 科技| 潜江市| 襄城县| 新昌县| 宁都县| 阿勒泰市| 陇南市| 双鸭山市| 驻马店市| 诸暨市| 濮阳市| 乐东| 连云港市| 龙里县| 定襄县| 晋江市| 根河市| 台中县| 江都市| 聂拉木县| 三原县| 香港| 石泉县| 衡阳县| 山阳县| 金川县| 安多县| 班戈县|