SharpDX之Direct2D教程II加载位图文件和保存位图文件.docVIP

  • 19
  • 0
  • 约8.05千字
  • 约 7页
  • 2017-06-24 发布于重庆
  • 举报

SharpDX之Direct2D教程II加载位图文件和保存位图文件.doc

SharpDX之Direct2D教程II加载位图文件和保存位图文件

绘制位图是绘制操作的不可缺少的一部分。在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?D2D.RenderTarget, File?As?String, FrameIndex?As?Integer)?As?D2D.Bitmap? ????????Dim?Decoder?As?New?WIC.BitmapDecoder(_ImagingFactory, File, DX.IO.NativeFileAccess.Read, WIC.DecodeOptions.CacheOnLoad)? ????????If?FrameIndex Decoder.FrameCount - 1?OrElse?FrameIndex 0?Then?FrameIndex = 0? ????????Dim?Source?As?WIC.BitmapFrameDecode?= Decoder.GetFrame(FrameIndex)? ????????Dim?Converter?As?New?WIC.FormatConverter(_ImagingFactory)? ??????? Converter.Initialize(Source, WIC.PixelFormat.Format32bppPBGRA)? ????????Return?D2D.Bitmap.FromWicBitmap(Render, Converter)? ????End?Function? 利用RenderTarget对象的DrawBitmap方法把Bitmap对象绘制到RenderTarget中去 下面是DrawBitmap方法的原型定义: ?? Public?Sub?DrawBitmap(bitmap?As?D2D.Bitmap, destinationRectangle?As?DX.RectangleF, opacity?As?Single, interpolationMode?AsD2D.BitmapInterpolationMode, sourceRectangle?As?DX.RectangleF)? Public?Sub?DrawBitmap(bitmap?As?D2D.Bitmap, opacity?As?Single, interpolationMode?As?D2D.BitmapInterpolationMode)? Public?Sub?DrawBitmap(bitmap?

文档评论(0)

1亿VIP精品文档

相关文档