zoukankan      html  css  js  c++  java
  • 关于cocos2d-x精灵加亮及变灰效果

    //根据现有CCSprite,变亮和变灰
    static CCSprite* graylightWithCCSprite(CCSprite* oldSprite,bool isLight)
    {
        //CCSprite转成CCimage
        CCPoint p = oldSprite->getAnchorPoint();
        oldSprite->setAnchorPoint(ccp(0,0));
        CCRenderTexture *outTexture = CCRenderTexture::create((int)oldSprite->getContentSize().width,(int)oldSprite->getContentSize().height);
        outTexture->begin();
        oldSprite->visit();
        outTexture->end();
        oldSprite->setAnchorPoint(p);
        
        CCImage* finalImage = outTexture->newCCImage();
        unsigned char *pData = finalImage->getData();
        int iIndex = 0;
        
        if(isLight)
        {
            for (int i = 0; i < finalImage->getHeight(); i ++)
            {
                for (int j = 0; j < finalImage->getWidth(); j ++)
                {
                    // highlight
                    int iHightlightPlus = 50;
                    int iBPos = iIndex;
                    unsigned int iB = pData[iIndex];
                    iIndex ++;
                    unsigned int iG = pData[iIndex];
                    iIndex ++;
                    unsigned int iR = pData[iIndex];
                    iIndex ++;
                    //unsigned int o = pData[iIndex];
                    iIndex ++;  //原来的示例缺少
                    iB = (iB + iHightlightPlus > 255 ? 255 : iB + iHightlightPlus);
                    iG = (iG + iHightlightPlus > 255 ? 255 : iG + iHightlightPlus);
                    iR = (iR + iHightlightPlus > 255 ? 255 : iR + iHightlightPlus);
                    //            iR = (iR < 0 ? 0 : iR);
                    //            iG = (iG < 0 ? 0 : iG);
                    //            iB = (iB < 0 ? 0 : iB);
                    pData[iBPos] = (unsigned char)iB;
                    pData[iBPos + 1] = (unsigned char)iG;
                    pData[iBPos + 2] = (unsigned char)iR;
                }
            }
        }else{
            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 ++;
                    //unsigned int o = pData[iIndex];
                    iIndex ++; //原来的示例缺少
                    unsigned int iGray = 0.3 * iR + 0.4 * iG + 0.2 * iB;
                    pData[iBPos] = pData[iBPos + 1] = pData[iBPos + 2] = (unsigned char)iGray;
                }
            }
        }
        
        CCTexture2D *texture = new CCTexture2D;
        texture->initWithImage(finalImage);
        CCSprite* newSprite = CCSprite::createWithTexture(texture);
        delete finalImage;
        texture->release();
        return newSprite;
    }

    http://blog.csdn.net/chenli0741/article/details/8860036

    在这个博客提供的png图片alpha通道的精灵变灰与变亮的。

    但是,在变灰的时候,如果图片是有红色的话,则会出现不同的效果,不是叠加,而图片直接变灰。

    可以看出,第二种情况,不是叠加上去的,而是把图片都变灰了。由于不怎么熟悉ARGB,还未解决的办法。

  • 相关阅读:
    哪种写法更好?<script></script> vs/or <script type=”text/javasript”></script>
    JS 脚本应该放在页面哪个位置 head body foot
    List<T> ForEach break
    嵌套JSON 取出name与value
    C# 改变图片尺寸(压缩),Image Resize
    tornado
    appachebench网站压力测试
    mysql分区分表
    redis的持久化存储,RDB与AOF
    MEMCACHE的内存管理和删除策略
  • 原文地址:https://www.cnblogs.com/yuan19/p/3280089.html
Copyright © 2011-2022 走看看