DirectDraw学习总结
最近一段时间,一直在学习DirectDraw. 在这里把自己学习的一些浅浅的体会写出来.因为自己工作中只使用很少的DirectDraw,所以也没有深入研究.基本上是浅尝辄止把.
要学习DirectDraw. 首先要熟悉COM. DirectX利用COM 实现了程序的无缝升级.这是DX一个很大的优点,用户无需对特定版本的DX编写程序.开发出来的程序基本可以在所有的Windows平台上运行. DirectDraw最高的版本是DirectDraw7, Directx8.0后即把DirectDraw与DX的3D部分合并了,(3D部分我未有涉及), DirectDraw主要有以下几个部分组成.DirectDraw对象,Surface对象, Clipper对象.Palette对象等.综合这些对象,可以实现高品质的2D图像处理. 如2D游戏,视频播放等.
首先介绍DirectDraw对象.该对象由IDirectDraw对象标识. 代表了机器上的显示设备(也就是显卡). 该对象用来确定显示模式,色深, 分辨率等等,并控制Surface等其他对象.
Surface对象代表了视频表面,每个Surface对应了一块内存. Surface分为Primary Surface, backbuffer Surface,OffScreen Surface, Primary Surface代表主显示表面,也就是用户在屏幕上看见的部分,.backBuffer Surface 是Primary Surface的后备缓冲, 用来与Primary Surface 形成视频切换链,从而达到高速显示图形的目的.BackBuffer Surface只存在于全屏模式下.OffScreen Surface代表一块存放位图的一块内存,用来存放程序中经常用到的图片,并可以在窗口模式下实现双缓冲,避免屏幕闪烁.
这里要提一下Blt,这是DX的核心内容,Blt函数可以实现单色填充表面,两个表面图像之间的拷贝,并可以实现在拷贝过程的图形放大与縮小(该处理是自动进行的.只要源拷贝区域大小与目的区域大小 不同即发生).Blt 还提供了色彩键屏蔽功能,从而实现透明拷贝.
下面要说一下BMP文件格式,因为该文件在图形处理中经常使用.BMP文件由四部分组成.BMP FileHeader,BMP Info Header, Palette Table, Image Data. 其中Palette Table是可选的, 只有在bmp文件色深为8位,使用调色板的情况下才会存在. 下面让我们看一下BMP Info Header的结构
typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
该结构中的biHeight位要注意,当该位为正数时,图形为倒置的,即位图的(0, 0)点存放的是原始图形的
(0, iHeight-1)的像素.这一点要切忌.还要注意的一点就是对齐问题,.这个问题在Surface和BMP图像文件
中都存在.处理行的时候一定要以pitch为单位.
最后再说一说Clipper和Palette对象.Clipper主要用来裁剪图像,防止绘制窗口之外的像素或者图像.
Palette对象主要用在256色模式下.被用来给DirectDraw对象设置调色板属性,256色模式现在很少被使用.
先写这么多,主要是一个大纲性质的,记住自己认为的要点,方便自己使用时察看.