DX下实现图片的遮罩(Mask)

虽然传统的用含遮罩信息的24bit图片来保存一个32bit的图像已经很少见了(以前的游戏比较常见),基本上随着png的流行,已经让32bit格式的图像普及网络以及游戏界了,当然更多的游戏采用dx原生支持的dds,或者可以自定义形状的更加灵活的tga格式等.不过这里还是介绍下在DX下Mask的实现,因为我的项目里涉及到可能要使用旧的游戏资源.

储存mask信息的图片:

DX下实现图片的遮罩(Mask)_第1张图片


D3DLOCKED_RECT locked_rect; 
temp->tex->tex->LockRect(0, &locked_rect, NULL, 0); 
   
BYTE *pByte = (BYTE *) locked_rect.pBits; 
BYTE *pmaskByte = (BYTE *) locked_rect.pBits + width*4; 
   
int  iOffset = locked_rect.Pitch/2;    //偏移字节数 
   
int i=0; 
for( int iRow=0; iRow<height; iRow++ ) 
{ 
    for( int iCol=0; iCol<width; iCol++ ) 
    { 
        masked_pixel_buf[i] = pByte[0]; 
        masked_pixel_buf[i+1] = pByte[1]; 
        masked_pixel_buf[i+2] = pByte[2]; 
        masked_pixel_buf[i+3] = 0xff - pmaskByte[0]; 
   
        i += 4; 
        pByte += 4; 
        pmaskByte += 4; 
    } 
    pByte += iOffset; 
    pmaskByte += iOffset; 
} 
   
temp->tex->tex->UnlockRect(0); 
temp->tex->tex->Release();


实现mask后的效果:

DX下实现图片的遮罩(Mask)_第2张图片

你可能感兴趣的:(游戏,网络,null,byte)