2024年4月30日发(作者:)

绘制位图是绘制操作的不可缺少的一部分。在Direct2D中绘制位图,必须先利用WIC

组件将位图加载到内存中,再绘制到RenderTarget中去

在SharpDX中绘制位图,分成两个部分:

利用WIC在SharpDX中加载位图,生成Bitmap对象

利用RenderTarget对象的DrawBitmap方法把Bitmap对象绘制到RenderTarget

中去

利用WIC在SharpDX中加载位图文件

利用WIC在SharpDX中绘制位图文件的核心内容就是把位图文件转换为Bitmap对

象。它的操作过程如下:

1、创建WIC的ImagingFactory类。

2、根据位图文件创建BitmapDecoder对象(实际上调用系统解码器解析位图文件)。

BitmapDecoder对象有1个属性和1个函数

FrameCount属性:只读属性,说明该位图对象包含的帧数。一般gif文件能包含

多个帧,其余格式的一般只有1个帧

GetFrame函数:返回指定帧对象。参数index是整形,说明是第几帧(从0开始)。

返回的是BitmapFrameDecode对象

3、利用BitmapDecoder对象的GetFrame函数,返回指定帧的

BitmapFrameDecode对象。(参数index一般是0,返回第1帧)

一般情况下,到此就可以了。但是,位图格式有很多,你可能不是很确定你的位图格

式是否兼容SharpDX的Bitmap对象。因此,比较好的做法是继续下面的步骤,将位图格

式转换为兼容SharpDX的Bitmap对象

4、创建FormatConverter对象。该对象负责进行格式转换。

5、调用FormatConverter对象的Initialize方法,进行格式转换。

6、最后,利用Bitmap对象的FromWicBitmap函数将之前的FormatConverter对

象转换为SharpDX的Bitmap对象

和Windows API Code Pack 1.1中的Direct2D略有不同的是,

BitmapFrameDecode对象和FormatConverter对象都继承BitmapSource对象,省去

了一个转换的过程

下面是代码

Protected Function LoadBitmap(Render As Target, File As String,

FrameIndex As Integer) As

Dim Decoder As New Decoder(_ImagingFactory, File,

, nLoad)