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

相关推荐
爱吃生蚝的于勒20 小时前
计算机基础 原码反码补码问题
经验分享·笔记·计算机网络·其他·1024程序员节
earthzhang20211 天前
《深入浅出HTTPS》读书笔记(20):口令和PEB算法
开发语言·网络协议·算法·https·1024程序员节
一个通信老学姐1 天前
专业140+总分410+浙江大学842信号系统与数字电路考研经验浙大电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节
earthzhang20212 天前
《深入浅出HTTPS》读书笔记(18):公开密钥算法RSA(续)
网络·网络协议·算法·https·1024程序员节
明明真系叻3 天前
第二十五周机器学习笔记:卷积神经网络复习、动手深度学习—线性回归、感知机
笔记·机器学习·线性回归·1024程序员节
java李杨勇4 天前
基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)
大数据·爬虫·数据挖掘·1024程序员节·网络用户购物行为分析可视化平台·大数据毕业设计
z_y_j2299704385 天前
SpringMVC全局异常处理
1024程序员节
博洋科技5 天前
关于网站的权重和百度蜘蛛爬虫的关系
小程序·dubbo·网站建设·1024程序员节·保定h5网站建设·保定网站建设
lzb_kkk6 天前
【Vue】自定义指令、插槽
开发语言·前端·javascript·vue.js·前端框架·ecmascript·1024程序员节
dbln6 天前
贪心算法(一)
算法·贪心算法·1024程序员节