一、前言

  正好项目用到要加载大量图片,虽然说可以使用WPF提供的自带的UI虚拟化功能,但是直接加载大量的图片到内存还是会

消耗很多的内存,而且WPF支持UI虚拟化的ListBox等容器的布局是VirtualizingStackPanel,这个对图片多样化的展示支持就

够呛了,这个布局的话可以自己重新写个虚拟布局管理器,这不是本节的内容,本节要讨论的在WPF下的图片缩略图的问题。

在网上一搜一大把都是Winform下的图片缩放,其实在WPF下实现图片的缩放也是非常简单的。

二、WPF实现缩略图

  WPF下图片的处理也是非常到位的,有很多的图片相关的处理类,如图片的编码解码包括裁剪图片啥的,都有。

  WPF图片的显示主要靠BitmapSource,这是个抽象类,有好几个实现类的。本文说的就是BitmapImage,从本地加载图片:

 BitmapImage bit = new BitmapImage();
using (FileStream fs = new FileStream(@"D:\Pictures\back.jpg", FileMode.Open))
{
fs.Seek(0, SeekOrigin.Begin);
bit.BeginInit();
bit.CreateOptions = BitmapCreateOptions.IgnoreColorProfile;
bit.CacheOption = BitmapCacheOption.OnLoad;
bit.DecodePixelWidth = 300;//需要缩略图的解码宽度
bit.DecodePixelHeight = (int)(bit.DecodePixelWidth * 0.625);//缩略图的解码高度
bit.StreamSource = fs;
bit.EndInit();
} img1.Source = bit;

  如上,便是生成缩略图的关键。可以自行对比缩略图和原始图占用内存的情况,甚至可以保存下来对比。

  当然如果想要等比例的缩放图片,可以尝试BitmapDecoder提前获取原图片的宽高,然后进行等比例缩放:

{
var decoder = BitmapDecoder.Create(fs, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
var thumnail = decoder.Thumbnail;
var frame = decoder.Frames[0];
var raww = frame.Width;//原图的宽
var rawh = frame.Height;//原图的高
}

最新文章

  1. linux cpu占有率居高不下 调试
  2. 使用xpath时出现noDefClass的错误(找不到某个类)
  3. Windows下 使用CodeBlocks配置OpenGL开发环境
  4. 30天,O2O速成攻略【8.22北京站】
  5. Linux Master/Baremetal Remote 配置下的裸机调试
  6. POJ Code the Tree 树的pufer编号
  7. HTML基本文件, CSS基础
  8. HTML 基本标签02
  9. sklearn.neighbors.kneighbors_graph的简单属性介绍
  10. VisualSVN Server启动错误(0x8007042a)
  11. Django Channels 入门指南
  12. 3sum 求三数之和等于0,不允许重复
  13. 【由浅入深理解java集合】(一)——集合框架 Collction、Map
  14. MySQL 查询所有的表名
  15. LOJ.6235.区间素数个数(Min_25筛)
  16. Cesium Up and Running Error: Cannot find module 'express'
  17. chrome下调试安卓app 之 ionic
  18. clear/reset select2,重置select2,恢复默认
  19. 方案dp。。
  20. 【原】Maven解决jar冲突调试步骤:第三方组件引用不符合要求的javassit导致的相关异常

热门文章

  1. Collection集合常用功能-Iterator接口介绍
  2. java7.14
  3. java基础(非常简单)
  4. 安卓逆向 HOOK 第一课 XP的安装以及编写
  5. [ARC107D] Number of Multisets
  6. 【SDOI2015】寻宝游戏
  7. CF1311F Moving Points
  8. Vulhub 漏洞学习之:Aria2
  9. ASP动态网页(网站)设计教程
  10. 【狂神说】SpringMVC笔记