zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    架构基础-CAP原理
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    CentOS 7 架设LNMP动态网站
    Linux下文件描述符
  • 原文地址:https://www.cnblogs.com/shiweihappy/p/4246477.html
Copyright © 2011-2022 走看看