笔记:在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个人主页-哔哩哔哩视频

相关推荐
比特在路上2 小时前
StackOrQueueOJ3:用栈实现队列
c语言·开发语言·数据结构·1024程序员节
0xCC说逆向2 天前
Windows图形界面(GUI)-QT-C/C++ - Qt键盘与鼠标事件处理详解
c语言·开发语言·c++·windows·qt·win32·1024程序员节
明明真系叻3 天前
2025.1.18机器学习笔记:PINN文献精读
人工智能·笔记·深度学习·机器学习·1024程序员节
0xCC说逆向4 天前
Windows图形界面(GUI)-QT-C/C++ - Qt List Widget详解与应用
c语言·开发语言·c++·windows·qt·win32·1024程序员节
明明真系叻6 天前
2025.1.12机器学习笔记:GAN文献阅读
人工智能·笔记·深度学习·机器学习·1024程序员节
比特在路上7 天前
OJ12:160. 相交链表
c语言·数据结构·算法·链表·1024程序员节
earthzhang20218 天前
《深入浅出HTTPS》读书笔记(28):DSA数字签名
开发语言·网络协议·算法·https·1024程序员节
比特在路上8 天前
初阶数据结构【栈及其接口的实现】
c语言·开发语言·数据结构·1024程序员节
lzb_kkk9 天前
【C++】C++11异步操作
c语言·开发语言·c++·1024程序员节
奈斯ing10 天前
【Oracle篇】深入了解执行计划中的访问路径(含表级别、B树索引、位图索引、簇表四大类访问路径)
运维·数据库·oracle·1024程序员节