• cocos2d-x图片变灰或者变亮


    //根据现有CCSprite,变亮和变灰
    CCSprite* FlyLeaf::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);
                    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.299 * iR + 0.587 * iG + 0.114 * 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;
    }
  • 相关阅读:
    Codeforces 722C. Destroying Array
    Codeforces 722D. Generating Sets
    【BZOJ】3436: 小K的农场
    数论四·扩展欧几里德
    数论三·约瑟夫问题
    数论二·Eular质数筛法
    #1287 : 数论一·Miller-Rabin质数测试
    树的维护
    可持久化线段树
    【NOIP2016】天天爱跑步
  • 原文地址:https://www.cnblogs.com/shiweihappy/p/4246477.html
Copyright © 2020-2023  润新知