笔记:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景

一、目的:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景

BitmapSource 是 WPF 中图像处理的基类,提供了许多派生类来处理不同类型的图像源。以下是一些常见的 BitmapSource 派生类、它们的主要功能、使用方法和使用场景:

二、主要功能、使用方法和使用场景

1. BitmapImage

主要功能:

• 加载和显示位图图像(如 JPEG、PNG、BMP 等)。

使用方法:
cs 复制代码
BitmapImage bitmapImage = new BitmapImage(new Uri("image.jpg", UriKind.Relative));
使用场景:

• 从文件、URI 或流中加载图像并显示在 UI 中。

2. WriteableBitmap

主要功能:

• 允许对图像进行读写操作。

使用方法:
cs 复制代码
WriteableBitmap writeableBitmap = new WriteableBitmap(200, 200, 96, 96, PixelFormats.Bgra32, null);
使用场景:

• 动态生成或修改图像内容,例如绘图应用或实时图像处理。

3. RenderTargetBitmap

主要功能:

• 将视觉对象(如控件或窗口)渲染为位图。

使用方法:
cs 复制代码
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Pbgra32);
renderTargetBitmap.Render(someVisual);
使用场景:

• 截图或生成图像快照,例如保存控件的当前状态为图像。

4. ColorConvertedBitmap

主要功能:

• 在不同颜色空间之间转换图像。

使用方法:
cs 复制代码
ColorContext sourceColorContext = new ColorContext(PixelFormats.Bgra32);
ColorContext destinationColorContext = new ColorContext(PixelFormats.Prgba128Float);
ColorConvertedBitmap colorConvertedBitmap = new ColorConvertedBitmap(bitmapImage, sourceColorContext, destinationColorContext, PixelFormats.Pbgra32);
使用场景:

• 颜色校正或颜色空间转换,例如从 sRGB 转换到 scRGB。

5. CroppedBitmap

主要功能:

• 从现有图像中裁剪出一个矩形区域。

使用方法:
cs 复制代码
Int32Rect cropRect = new Int32Rect(50, 50, 100, 100);
CroppedBitmap croppedBitmap = new CroppedBitmap(bitmapImage, cropRect);
使用场景:

• 图像裁剪操作,例如从大图中提取小区域。

6. TransformedBitmap

主要功能:

• 对图像应用变换(如旋转、缩放、平移等)。

使用方法:
cs 复制代码
TransformedBitmap transformedBitmap = new TransformedBitmap(bitmapImage, new RotateTransform(90));
使用场景:

• 图像变换操作,例如旋转图像或缩放图像。

7. FormatConvertedBitmap

主要功能:

• 将图像从一种像素格式转换为另一种像素格式。

使用方法:
cs 复制代码
FormatConvertedBitmap formatConvertedBitmap = new FormatConvertedBitmap(bitmapImage, PixelFormats.Gray8, null, 0);
使用场景:

• 图像格式转换操作,例如将彩色图像转换为灰度图像。

8.CachedBitmap

主要功能

• 缓存图像数据: 将图像数据缓存到内存中,以便快速访问。

• 提高性能: 通过减少对原始图像源的访问次数,提高图像处理的性能。

使用方法

以下是一个简单的示例,演示如何使用 CachedBitmap:

cs 复制代码
// 创建一个 BitmapImage 作为源图像
BitmapImage bitmapImage = new BitmapImage(new Uri("image.jpg", UriKind.Relative));

// 创建一个 CachedBitmap,将源图像缓存到内存中
CachedBitmap cachedBitmap = new CachedBitmap(bitmapImage, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);

// 将 CachedBitmap 设置为 Image 控件的源
Image imageControl = new Image();
imageControl.Source = cachedBitmap;
使用场景

• 频繁访问图像数据: 在需要频繁访问或处理图像数据的场景中,使用 CachedBitmap 可以显著提高性能。例如,在图像编辑器或实时图像处理应用中

• 减少加载时间: 当图像需要多次显示或处理时,使用 CachedBitmap 可以减少每次加载图像的时间。

• 提高渲染性能: 在需要高性能渲染的场景中,使用 CachedBitmap 可以减少对原始图像源的访问,从而提高渲染性能。

详细解释

• BitmapCreateOptions: 指定创建位图时的选项。常用的选项包括 None 和 IgnoreImageCache。

• BitmapCacheOption: 指定缓存选项。常用的选项包括 OnLoad(在加载时缓存图像数据)和 OnDemand(按需缓存图像数据)。

示例代码解释

  1. 创建源图像: 使用 BitmapImage 从文件或 URI 加载图像。

  2. 创建 CachedBitmap: 使用 CachedBitmap 将源图像缓存到内存中。

  3. 设置图像源: 将 CachedBitmap 设置为 Image 控件的源,以便在 UI 中显示缓存后的图像。

总结

这些 BitmapSource 派生类提供了丰富的功能,允许你在 WPF 中灵活地处理各种图像操作。根据具体的使用场景,你可以选择合适的类来实现所需的图像处理功能。如果你有更多问题或需要进一步的解释,请随时提问!

需要了解的知识点

BitmapSource 类 (System.Windows.Media.Imaging) | Microsoft Learn

BitmapImage 类 (System.Windows.Media.Imaging) | Microsoft Learn

CachedBitmap 类 (System.Windows.Media.Imaging) | Microsoft Learn

ColorConvertedBitmap 类 (System.Windows.Media.Imaging) | Microsoft Learn

CroppedBitmap 类 (System.Windows.Media.Imaging) | Microsoft Learn

FormatConvertedBitmap 类 (System.Windows.Media.Imaging) | Microsoft Learn

RenderTargetBitmap 类 (System.Windows.Media.Imaging) | Microsoft Learn

TransformedBitmap 类 (System.Windows.Media.Imaging) | Microsoft Learn

https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.media.imaging.writeablebitmap?view=windowsdesktop-8.0&WT.mc_id=MVP_380318

System.Windows.Controls 命名空间 | Microsoft Learn

控件库 - WPF .NET Framework | Microsoft Learn

WPF 介绍 | Microsoft Learn

XAML概述 - WPF .NET | Microsoft Learn

Windows Presentation Foundation 简介 - WPF .NET | Microsoft Learn

使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn

源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

了解更多

适用于 .NET 8 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

适用于 .NET 7 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

Reference Source

Sysinternals - Sysinternals | Microsoft Learn

Windows app development documentation - Windows apps | Microsoft Learn

欢迎使用 Expression Blend | Microsoft Learn

https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/?view=netdesktop-7.0&WT.mc_id=MVP_380318

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关推荐
✿ ༺ ོIT技术༻5 天前
Linux:TCP和守护进程
linux·运维·服务器·网络·tcp/ip·1024程序员节
辅助东皇燕双鹰9 天前
行测知识()
1024程序员节
深蓝易网12 天前
探寻制造型企业MES管理系统:功能、架构与应用全解析
大数据·运维·人工智能·架构·制造·1024程序员节
Lenyiin17 天前
2848、与车相交的点
c++·算法·leetcode·1024程序员节
earthzhang202123 天前
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL
开发语言·网络·python·https·1024程序员节
不讲废话的小白25 天前
怎么样把pdf转成图片模式(不能复制文字)
pdf·1024程序员节
明明真系叻25 天前
2025.1.26机器学习笔记:C-RNN-GAN文献阅读
人工智能·笔记·深度学习·机器学习·生成对抗网络·1024程序员节
Joeysoda1 个月前
Java数据结构 (从0构建链表(LinkedList))
java·linux·开发语言·数据结构·windows·链表·1024程序员节
清风-云烟1 个月前
使用redis-cli命令实现redis crud操作
java·linux·数据库·redis·spring·缓存·1024程序员节
Joeysoda1 个月前
Java数据结构 (链表反转(LinkedList----Leetcode206))
java·linux·开发语言·数据结构·链表·1024程序员节