|
热门文章
推荐文章
最新文章
|
移动到平面(Blitting to Surfaces)
添加时间:2008-08-11 原文发表时间:2008-08-11 人气:2
本文章共5438字,分4页,当前第1页,快速翻页:
| 译者按:我到现在也不知道Blit如何翻译,其意义是将一个平面的一部分或全部图象整块从这个平面复制到另一个平面。以后我会用Blit代替这些麻烦的解释。
这部分阐述了如何将一个DirectDraw平面的像素复制到另一个,或是其一部分。
含有以下主题:
基本Blit
用BltFast来Blit
用Blt来Blit
适时Blit
透明Blit
色填充
Blit到多窗口
基本Blit
有两个宏可以复制图象到一个DirectDraw平面: IDirectDrawSurface4::Blt及IDirectDrawSurface4::BltFast。(还有第三个宏, IDirectDrawSurface4::BltBatch不在这个版本的DirectX中应用) 这些宏由目标平面调用并返回源平面参数。目标及源平面可以是同一个,你不必担心重叠DirectDraw会在覆盖之前事先保护这些原来的像素。
对于两个应用的宏,Blt更灵活而BltFast更快,但这仅在非硬件的Blit。你可以用IDirectDraw4::GetCaps宏中的lpDDDriverCaps 参数中包含的DDCAPS结构来决定硬件的Blit能力。如果dwCaps成员包含DDCAPS_BLT,硬件就至少支持最小程度的Blit能力。
--------------------------------------------------------------------------------
用BltFast来Blit
当使用IDirectDrawSurface4::BltFast,你要在源平面提供一个有效的矩形以用来复制(或用NULL来指定整个平面),以及目标平面的X及Y坐标。源矩形必须能够适合目标平面,从左上角的点 (换言之,源矩形不能大于目标平面),否则调用会失败并返回DDERR_INVALIDRECT值。 BltFast无法用于已附加剪切的平面。
没有伸拉,镜面(反转),或其他效果在BltFast中不被提供。
BltFast 例程:
以下例程将从一个屏下平面lpDDSOffOne复制像素到主平面lpDDSPrimary。标志保证操作会发生于Blitter(Blit器)空闲时,并且源图象的透明色将不被复制。 (标志的具体含义参见,适时Blit及透明Blit。)
lpDDSPrimary->BltFast(
100, 200, // Upper left xy of destination左上角的XY位置
lpDDSOffOne, // Source surface源平面
NULL, // Source rectangle = entire surface源矩形=整个平面
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
--------------------------------------------------------------------------------
用Blt来Blit
当使用IDirectDrawSurface4::Blt宏,你要在源平面提供一个有效的矩形以用来复制 (或用NULL来指定整个平面),及在目标平面中提供一个矩形来存放要复制的图象 (同样,NULL表示矩形包括整个平面)。如果目标平面附加剪切,目标矩形的边界能超出平面并且会进行剪切。如果没有剪切器(Clipper),目标矩形必须在平面以内或一致,否则调用宏失败返回DDERR_INVALIDRECT。 (详见剪裁,剪裁器。)
缩放比例
Blt宏会自动安排源图象填充于目标矩形。如果缩放比例并非是你所希望的,要得到最佳性能请确认源及目标矩形是一个尺寸,或干脆用IDirectDrawSurface4::BltFast。(详见用BltFast来Blit。)
缩放的硬件加速需要依靠设备的DDCAPS结构中的dwFXCaps成员的DDFXCAPS_BLT*标志。如果,例如,一个设备有DDFXCAPS_BLTSTRECTCHXN能力但没有DDFXCAPS_BLTSTRECTCHX能力,就可以支持源矩形的X坐标的所有成员的倍数增加,而不支持非整数(任意)的伸拉。
设备可能也支持算术伸拉,也就是通过插值运算而非简单增加或删除像素。比如,如果一个坐标轴被拉长三分之一,针对原来的图象,像素会被重新着色为一个近似值,不然就会在这个坐标轴上每隔三个像素点产生一个重叠色。
应用程序无法控制驱动程序的伸拉类型,除非设置传递给Blt的DDBLTFX结构的dwDDFX 成员中DDBLTFX_ARITHSTRETCHY标志。这个标志请求算术伸拉可以在Y轴上进行。 X轴的算术伸拉及算术收缩在现在的DirectDraw API中不被支持,但驱动程序可能默认提供。
其他效果 本文章更多内容:1 - 2 - 3 - 4 - 下一页>> |
/jian_tou_2.gif) 本文章所属分类: 首页
→ Window编程
|
文章搜索
|