WPF:Graphics图表--EncodingAndersonDecoding图像编解码(2)

clipboard.png

BitmapSource

表示具有特定大小和分辨率的单个不变的像素集。

  1. BitmapSource 可能是解码器提供的图像文件中的单个帧,或者可能是在它自己的 BitmapSource 上执行转换的结果。 BitmapSource 不用于表示多帧图像或动画。
  2. 本身支持位图 (BMP)、图形交换格式 (GIF)、联合图像专家组 (JPEG)、可移植网络图形 (PNG) 和标记图像文件格式 (TIFF) 图像的压缩和解压缩。
  3. 对于位图解码方案,BitmapSource 基于用户系统上已安装的编解码器使用自动编解码器发现。图像的最大高度和宽度为 2^16 像素(每通道 32 位 * 4 通道)。 BitmapSource 的最大大小为 2^32 个字节(64 GB),并且最大的图像大小为 4 千兆像素。 最小的图像大小为 1x1。

BitmapFrame 类:表示由解码器返回并被编码器接受的图像数据。

  1. 通过提供对与图像特定框架关联的 Thumbnail 的访问,BitmapFrame 可提供未经 BitmapSource 定义的附加功能。 BitmapFrame 还支持通过使用 Metadata 属性或 $ CreateInPlaceBitmapMetadataWriter 方法的元数据信息写入。
  2. 从解码器返回的所有 BitmapFrame 将始终冻结。 如果需要可修改副本,则必须先使用 Clone 方法创建 BitmapFrame 的副本。
  3. 只有标记图像文件格式 (TIFF) 和图形交换格式 (GIF) 格式图像支持多个帧。

BitmapImage 类:提供一个经优化以使用XAML上载图像的专用 BitmapSource。

  1. 为尚未由 BitmapSource 定义的位图加载引入附加属性。
  2. BitmapImage 实现 ISupportInitialize 接口,以对多个属性的初始化进行优化。 只能在对象初始化过程中进行属性更改。 调用 BeginInit 以表示初始化开始;调用 EndInit 以表示初始化结束。 初始化后,将忽略属性更改。
  3. 使用 BitmapImage 构造函数创建的 BitmapImage 对象将自动初始化,且将忽略对属性的更改。

CachedBitmap 类:为 BitmapSource 提供缓存功能。

  1. BitmapSource 不会自动缓存位图数据。 在需要对单个位图执行多个操作(例如剪裁或缩放图像)的情况下,使用 CachedBitmap 可以提高性能。

ColorConvertedBitmap 类:更改 BitmapSource 的颜色空间。

  1. ColorConvertedBitmap 实现 ISupportInitialize 接口,以对多个属性的初始化进行优化。 只能在对象初始化过程中进行属性更改。 调用 BeginInit 以表示初始化开始;调用 EndInit 以表示初始化结束。 初始化后,将忽略属性更改。
  2. 使用 ColorConvertedBitmap(BitmapSource, ColorContext, ColorContext, PixelFormat) 构造函数创建的 ColorConvertedBitmap 对象将自动初始化,并且将忽略属性更改。
  3. ColorConvertedBitmap 从不缓存。

CroppedBitmap 类:裁剪一个 BitmapSource。

  1. CroppedBitmap 实现 ISupportInitialize 接口,使用 CroppedBitmap(BitmapSource, Int32Rect) 构造函数创建的 CroppedBitmap 对象将自动初始化,且属性无法更改。
  2. 如果在应用转换后将图像保存到文件,则必须更新与图像数据相关的元数据标记。
  3. 使用此类的 SourceRect 属性定义要裁剪的位图区域。

FormatConvertedBitmap 类:为 BitmapSource 提供像素格式转换功能。

  1. FormatConvertedBitmap 实现 ISupportInitialize 接口,构造函数创建的 FormatConvertedBitmap 对象会自动初始化,并且将忽略属性更改。
  2. 对于在 RGB 颜色空间之间具有不同特征的格式转换,应当使用 ColorConvertedBitmap 类。 颜色空间之间的转换需要域映射的源颜色配置配件和目标颜色配置文件,以提供可靠的颜色转换。 颜色配置文件由 ColorConvertedBitmap 的 ColorContext 参数提供或由 DestinationColorContext 和 SourceColorContext 属性提供。
  3. 如果在应用转换后将图像保存到文件,则必须更新与图像数据相关的元数据标记。

RenderTargetBitmap 类:将 Visual 对象转换为位图。

  1. 如 RenderTargetBitmap 将文本呈现为图像。drawingContext.DrawText()》RenderTargetBitmap.Render()》Image.Source

TransformedBitmap 类:缩放并旋转 BitmapSource。

  1. 仅支持正交转换,如 90° 增量旋转转换和缩放转换。 不支持扭曲图像的转换。
  2. 实现 ISupportInitialize 接口,以对多个属性的初始化进行优化。 只能在对象初始化过程中进行属性更改。 调用 BeginInit 以表示初始化开始;调用 EndInit 以表示初始化结束。 初始化后,将忽略属性更改。

WriteableBitmap 类:提供一个可写入并可更新的 BitmapSource。

  1. 使用 WriteableBitmap 类基于每个框架来更新和呈现位图。 这对于生成算法内容(如分形图像)和数据可视化(如音乐可视化工具)很有用。
  2. WriteableBitmap 类使用两个缓冲区。 “后台缓冲区”在系统内存中分配,它可以累计当前未显示的内容。 “前台缓冲区”在系统内存中分配,它包含当前显示的内容。 呈现系统将前台缓冲区复制到视频内存中以便显示。
  3. UI 线程将内容写入后台缓冲区。 呈现线程从前台缓冲区读取内容,然后将其复制到视频内存中。 将使用更改的矩形区域跟踪对后台缓冲区的更改。
  4. 调用 WritePixels 重载之一来自动更新和显示后台缓冲区中的内容。若要更好地控制更新,以及对后台缓冲区进行多线程访问,请使用以下工作流程。

    1. 调用 Lock 方法为更新保留后台缓冲区。
    2. 通过访问 BackBuffer 属性获得指向后台缓冲区的指针。
    3. 将更改写入后台缓冲区。 当 WriteableBitmap 锁定时,其他线程可能将更改写入后台缓冲区。
    4. 调用 AddDirtyRect 方法,以指示已更改的区域。
    5. 调用 Unlock 方法,以释放后台缓冲区并允许呈现到屏幕上。
  5. 当更新被发送到呈现线程时,呈现线程将更改的矩形从后台缓冲区复制到前台缓冲区。 呈现系统对此交换加以控制,以免发生死锁和重绘伪影,如“拆开”。

clipboard.png
BitmapDecoder 类:表示位图帧的一个容器。 每个位图帧都是 BitmapSource。 此抽象类为所有派生解码器对象提供一组基本功能。

  1. 容器中的每个 BitmapFrame 都可能具有不同的特性,包括不同的大小、分辨率或调色板等等。
  2. 除非已选择特定的编解码器,否则WPF将使用自动运行时发现来识别图像格式并将其与相应的编解码器匹配。此发现过程允许系统自动发现 独立软件供应商 (ISV) 开发的编码解码器。

BmpBitmapDecoder、GifBitmapDecoder、IconBitmapDecoder、JpegBitmapDecoder、PngBitmapDecoder、TiffBitmapDecoder。

LateBoundBitmapDecoder 类:定义一个要求延迟位图创建的解码器,例如异步图像下载。

  1. 如果指定了 DelayCreation,则使用 LateBoundBitmapDecoder。 Decoder 属性会根据需求创建所需的“实际解码器”。 正在下载内容时,所有解码器属性将返回 null。
  2. 应用程序可检查 IsDownloading 属性或为 DownloadCompleted 事件添加委托以监视下载状态。 此外,正在下载图像时任何从 LateBoundBitmapDecoder 获取的帧将返回宽高比 1,1,直至帧下载完毕。

WmpBitmapDecoder 类:为 Microsoft Windows Media 照片编码图像定义一个解码器。

  1. Microsoft Windows Media 照片是一个新的编解码器,与 JPEG 相比,它具有更多功能,能提供更佳的图像保真度,并可减小文件的大小。
  2. Microsoft Windows Media 照片是一个新的编解码器,与 JPEG 相比,它具有更多功能,能提供更佳的图像保真度,并可减小文件的大小。

BitmapMetadata 类:提供对从位图图像中读取元数据以及将元数据写入位图图像的支持。

  1. 与图像关联的元数据是描述图像(但不一定会显示图像)的数据。 每种支持的位图图像格式都采用不同的方式处理元数据,但读取和写入元数据的功能相同。
  2. 如果 BitmapMetadata 是由通过使用 BitmapDecoder 获取的 BitmapFrame 公开的,则默认情况下它是只读的,并且可变操作将引发异常。 如果它是由包装另一个 BitmapSource 的 BitmapFrame 公开的,则它在构造上是可变的。
  3. 可以使用 SetQuery 和 GetQuery 方法来构造和读取元数据查询。

InPlaceBitmapMetadataWriter 类:启用对 BitmapMetadata 的现有块的就地更新。

  1. 如果 BitmapMetadata 不与通过 BitmapDecoder 获得的 BitmapFrame 关联,则使用就地编写器写入元数据的尝试将失败。 成功的写入操作会将元数据通过解码器直接应用到图像流。
  2. 如果尝试写入给定位图格式不支持的元数据,则就地元数据更新将失败。
  3. 若要执行就地元数据编辑,必须使用 Default 或 OnDemand 缓存选项对位图进行解码。 OnLoad 不保证能够获得对就地元数据编辑所需的元数据流的访问。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值