|
|
发表于 2005-2-7 00:20:00
|
显示全部楼层
Re:高手救命,关于DDraw中操作页面内存数据
首先要弄清表面的色彩深度。256色每个点用一个字节来表示;16位色每个点用两个字节表示;24位色每个点用3个字节表示;32位色每个点用4字节表示。
另外还有一个表面跨距的概念,举个例子来说:假设是24位表面,宽度为431个像素,那么图像的每行数据占用431*3=1293个字节,然后看这个数是不是4的整数倍,如果不是还需要补成4的整数倍,也就是说,1293 Mod 4=1,所以每行数据的实际宽度为1293+(4-1)=1296个字节。
DDSURFACEDESC2 desc;
ZeroMemory( &desc, sizeof(desc) );
desc.dwSize = sizeof(desc);
HRESULT r=surf->Lock( 0, &desc, DDLOCK_WAIT | DDLOCK_WRITEONLY, 0 );
这个数据保存在desc.lPitch中,可以很方便的获得。
注意到了以上的问题应该就不会出错了!
|
|