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

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

储存mask信息的图片:



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后的效果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值