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;
}