Width vs Pitch

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;
        }
     }

}
posted @ 2014-08-04 11:36  YinaPan  阅读(457)  评论(0编辑  收藏  举报