1、单位不同,width是像素,pitch是字节。因此一个640*480的8位图和640*480的32位 图他们width一样而pitch不一样。
2、pitch可能大于width个像素所占字节数。width就是图像实际显示的宽度;而pitch 是存储一行图像所占的字节(相邻两行起点指针的差值),有时为了高效处理,会将每 行图像都对齐存储,这样pitch就包括了对齐使用的填充字节。
void ChangeRed() { //假定_surface是一个指向IDirectSurface9接口的指针 //每个像素 32bit的像素格式 //取得表面描述 D3DSURFACE_DESC surfaceDesc; _surface->GetDesc(&surfaceDesc); //取得被锁定的表面像素指针 D3DLOCKED_RECT lockedRect; _surface->LockRect( &lockedRect,//指向被锁定表面的数据 0,//0表示锁定全部表面 0);//0表示没有锁定标记 //遍历表面上的每个像素,将他们设为红色 DWORD *imageData = (DWORD *)lockedRect.pBits; for (int i = 0; i < surfaceDesc.Width; ++i) { for (int j = 0; j < surfaceDesc.Height; ++j) { //取得纹理索引 int index = i * lockedRect.Pitch / 4 + j; imageData[index] = 0xffff0000; } } }