精灵变灰

// 精灵变灰
Sprite CUserData ::MakeSpiteGray( Sprite * ChangeSprite)
{
Sprite * sprite_chess =  Sprite :: createWithSpriteFrame (ChangeSprite-> getSpriteFrame ());
    sprite_chess-> setPosition (sprite_chess-> getContentSize (). width /2, sprite_chess-> getContentSize (). height /2);

RenderTexture  *render =  RenderTexture :: create (sprite_chess-> getContentSize (). width , sprite_chess-> getContentSize (). height , Texture2D :: PixelFormat :: RGBA8888 );
    render-> beginWithClear (0.0f, 0.0f, 0.0f, 0.0f);
    sprite_chess-> visit ();
    render-> end ();
Director :: getInstance ()-> getRenderer ()-> render ();

     Image  *finalImage = render-> newImage ();

     unsigned   char  *pData = finalImage-> getData ();

     int  iIndex = 0;

     for  ( int  i = 0; i < finalImage-> getHeight (); i ++)
    {
         for  ( int  j = 0; j < finalImage-> getWidth (); j ++)
        {
             // gray
             int  iBPos = iIndex;

             unsigned   int  iB = pData[iIndex];

            iIndex ++;

             unsigned   int  iG = pData[iIndex];

            iIndex ++;

             unsigned   int  iR = pData[iIndex];

            iIndex ++;
            iIndex ++;

             unsigned   int  iGray = 0.3 * iR + 0.6 * iG + 0.1 * iB;

            pData[iBPos] = pData[iBPos + 1] = pData[iBPos + 2] = ( unsigned   char )iGray;
        }

    }


     Texture2D  *texture =  new   Texture2D ;

    texture-> initWithImage (finalImage);

     auto  pSprite =  Sprite :: createWithTexture (texture);

     delete  finalImage;

    texture-> release ();

     return  pSprite;

}

http://www.cocoachina.com/bbs/read.php?tid=219268


我这里用的是  Sprite :: createWithSpriteFrame,主要是为了从已加载的 texturepacker打包的plist中 获取的精灵,所以用了RenderTexture绘制。。。
如果是用的散图,就简单多了,直接new Image;在调用initwithfile("xx.png"),然后getData(),后面代码一样了;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值