Bootstrap

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

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

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


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

1. BitmapImage


主要功能:


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


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


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


2. WriteableBitmap


主要功能:


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


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


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


3. RenderTargetBitmap


主要功能:


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


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


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


4. ColorConvertedBitmap


主要功能:


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


使用方法:
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


主要功能:


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


使用方法: 
Int32Rect cropRect = new Int32Rect(50, 50, 100, 100);
CroppedBitmap croppedBitmap = new CroppedBitmap(bitmapImage, cropRect);

使用场景:


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


6. TransformedBitmap


主要功能:


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


使用方法: 
TransformedBitmap transformedBitmap = new TransformedBitmap(bitmapImage, new RotateTransform(90));
 使用场景:


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


7. FormatConvertedBitmap


主要功能:


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


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


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

8.CachedBitmap

主要功能


•    缓存图像数据: 将图像数据缓存到内存中,以便快速访问。
•    提高性能: 通过减少对原始图像源的访问次数,提高图像处理的性能。


使用方法


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

// 创建一个 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个人主页-哔哩哔哩视频

;