WPF 图像处理大幅改进了 Windows 先前版本的图像处理功能。 显示位图或在公共控件上使用图像等图像处理功能以前主要由 Microsoft Windows 图形设备接口 (GDI) 或 Microsoft Windows GDI+ 应用程序编程接口 (API) 处理。 这些 API 提供基线图像处理功能,但缺少编解码器扩展性支持和高保真图像支持等功能。 WPF 图像处理 API 已经过重新设计,克服了 GDI 和 GDI+ 的缺点,提供一组新的 API,用于在应用程序内显示和使用图像。
有关详细信息,请参阅 图像概述。
BitmapScalingMode
对任何位图缩放进行动画处理时,默认的高质量图像重采样算法有时可能由于消耗过多系统资源导致帧速率下降,继而导致动画明显变慢。 通过将 RenderOptions 对象的 BitmapScalingMode 属性设置为 LowQuality,缩放位图时可创建更为流畅的动画。 处理图像时,LowQuality 模式会通知 WPF 绘制引擎从质量优化算法切换至速度优化算法。
下面的示例演示如何为图像对象设置 BitmapScalingMode。
// Set the bitmap scaling mode for the image to render faster.
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality);
' Set the bitmap scaling mode for the image to render faster.
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality)
CachingHint
默认情况下,WPF 不会缓存 TileBrush 对象的绘制内容,例如 DrawingBrush 和 VisualBrush。 在静态方案中,内容和场景中 TileBrush 的使用皆不会发生改变,这样具有一定意义,因为可节省视频内存。 以非静态方式使用具有静态内容的 TileBrush 时(例如静态 DrawingBrush 或 VisualBrush 映射到旋转 3D 对象的图面时),这样做的意义不大。 WPF 的默认行为是对每个帧重新绘制 DrawingBrush 或 VisualBrush 的整个内容(即使内容未改变也是如此)。
通过将 RenderOptions 对象的 CachingHint 属性设置为 Cache,可使用缓存版平铺画笔对象来提升性能。
CacheInvalidationThresholdMinimum 和 CacheInvalidationThresholdMaximum 属性值为相对大小值,这些值决定由于比例更改而应何时重新生成 TileBrush 对象。 例如,通过将 CacheInvalidationThresholdMaximum 属性设置为 2.0,TileBrush 的缓存仅需在其大小超过当前缓存大小两倍时重新生成。
如下示例演示如何对 DrawingBrush 使用缓存提示选项。
DrawingBrush drawingBrush = new DrawingBrush();
// Set the caching hint option for the brush.
RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache);
// Set the minimum and maximum relative sizes for regenerating the tiled brush.
// The tiled brush will be regenerated and re-cached when its size is
// 0.5x or 2x of the current cached size.
RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5);
RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0);
Dim drawingBrush As New DrawingBrush()
' Set the caching hint option for the brush.
RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache)
' Set the minimum and maximum relative sizes for regenerating the tiled brush.
' The tiled brush will be regenerated and re-cached when its size is
' 0.5x or 2x of the current cached size.
RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5)
RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0)
优化 WPF 应用程序性能
规划应用程序性能
布局和示例
应用程序资源
其他性能建议
动画提示和技巧