项目中要实现一张图片下半部分渐隐效果 网上找的代码 改动了一下
Sprite* Tools::setGradualOpacity(const char* icon, int height)
{
Image* image = new Image();
image->initWithImageFile(icon);
unsigned char data = image->getData();
unsigned short imageHeight = image->getHeight();
unsigned short imageWidth = image->getWidth();
int startY = 0;
int gradualHeight = 0; //如果渐进透明的高度小于图片高度,取设置的高度
if(height < imageHeight)
{
startY = imageHeight - height;
gradualHeight = height;
}
else//如果渐进透明的高度大于图片高度,取图片的高度
{
startY = imageHeight - height;
gradualHeight = imageHeight;
}
for(int i = 0; i < imageHeight; i++)
{
float opacityRatio =1.0f;
if(i >= startY)
{
opacityRatio = 1.0- (float)(i - startY)/gradualHeight;
}
//opacityRatio = opacityRatio/2.f; //设置每一个像素的透明度
// CCLOG(“opacityRatio =%f”,opacityRatio);
for (int j = 0; j < imageWidth; j ++)
{ //经过反复验证调试,仅仅设置透明度A的参数达不到效果,需要RGBA是个色值都要乘、//以相应的参数才能实现渐 透的效果。
int index = (iimageWidth + j)4;
unsigned char imageR = data;
unsigned char imageG = data;
unsigned char imageB = data;
unsigned char imageA = data;
imageR = (unsigned char)(opacityRatioimageR);
imageG = (unsigned char)(opacityRatioimageG);
imageB = (unsigned char)(opacityRatioimageB);
imageA = (unsigned char)(opacityRatioimageA);
data = imageR;
data = imageG;
data = imageB;
data = imageA;
}
}
Texture2D texture = new Texture2D;
texture->initWithImage(image);
Sprite* sprite = Sprite::createWithTexture(texture);
CC_SAFE_RETAIN(sprite);
image->release();
return sprite;
}