CCSprite*
FlyLeaf::graylightWithCCSprite(CCSprite* oldSprite,bool isLight)
{
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 ++)
{
int iHightlightPlus
= 50;
int iBPos
= iIndex;
unsigned int iB
= pData[iIndex];
iIndex
++;
unsigned int iG
= pData[iIndex];
iIndex
++;
unsigned int iR
= pData[iIndex];
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 ++)
{
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.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;
}