DirectDraw:lpitch的理解 冷夜

       lpitch是结构体DDSURFACEDESC2的一项,这个结构体描述了页面/表面的一些信息。

       lpitch一般译做步幅(stride)或内存宽度(memory width)。注意,它与DDSURFACEDESC2结构体中的另一项dwWidth的意义是不一样的。

       lpitch的单位是字节,dwWidth的单位是像素。所以,一个640×480×8(640×480个像素,每像素用8位,即一个字节表示)页面,dwWidth=640 像素(字节)。但是,此时Lpitch不一定就等于640(字节)!同样一个640×480×16的页面,它的Lpitch值也不一定等于640×2(字节)。

       这是因为,Lpitch中的字节数有时还包含了高速缓冲区的内存字节数。如下图:

       

       通过以上图可以看到,页面外面还有一段额外内存,而这段内存是未知的;所以说,假如一个640×480×8的页面,它的dwWidth值是640,但是,它的Lpitch值应该是640+x,x就是高速缓冲区Cache占用的内存。

      所以,如果要访问这个页面缓冲区的第y行的第x个像素,应该这样:

     ddsd.lpSurface[x+y*ddsd.lpitch]
转载:http://hi.baidu.com/daoguchengshu/item/06aa4a09d3ca7810ebfe3815

原文地址:https://www.cnblogs.com/gamesky/p/2638382.html