WPF中BitmapFrame和BitmapImage之间的区别

时间:2020-03-06 14:57:07  来源:igfitidea点击:

WPF中的BitmapFrame和BitmapImage有什么区别?我们将在哪里使用它们(即,为什么要使用BitmapFrame而不是BitmapImage?)

解决方案

如果需要获取位,则应该坚持使用抽象类BitmapSource,或者如果只想绘制它,则应坚持使用ImageSource。

实现BitmapFrame只是实现的面向对象性质。我们实际上不需要区分这些实现。 BitmapFrames可能包含一些额外的信息(元数据),但通常只有成像应用程序会关心。

我们会注意到从BitmapSource继承的其他这些类:

  • 位图框架
  • 位图图像
  • 缓存位图
  • ColorConvertedBitmap
  • 裁剪位图
  • FormatConvertedBitmap
  • RenderTargetBitmap
  • 变换位图
  • WriteableBitmap

我们可以通过构造BitmapImage对象从URI获取BitmapSource:

Uri uri = ...;
BitmapSource bmp = new BitmapImage(uri);
Console.WriteLine("{0}x{1}", bmp.PixelWIdth, bmp.PixelHeight);

BitmapSource也可以来自解码器。在这种情况下,我们将间接使用BitmapFrames。

Uri uri = ...;
BitmapDecoder dec = BitmapDecoder.Create(uri, BitmapCreateOptions.None, BitmapCacheOption.Default);
BitmapSource bmp = dec.Frames[0];
Console.WriteLine("{0}x{1}", bmp.PixelWIdth, bmp.PixelHeight);

BitmapFrame是用于图像处理的低级原语。当我们要将某些图像从一种格式编码/解码为另一种格式时,通常使用它。

BitmapImage是更高级的抽象,具有一些整洁的数据绑定属性(UriSource等)。

如果我们只是显示图像,并且想要进行一些微调,则需要BitmapImage。

如果我们要进行低级图像处理,则将需要BitmapFrame。