我为什么需要这个?
基本上我需要将彩色图像变成灰度.包括灰度版本的图像可能是一个解决方案,但在我的情况下空间紧张 – 我不希望我的APK太大.此外,我也想研究一些效果的像素.再次,这是为了使APK更小.
我找到了getPixel setPixel from CCTexture2D和Getting image’s pixel RGBA,但我想要更简单的东西.
任何帮助表示赞赏.
谢谢!
解决方法
这是我的解决方案:
1.首先制作你图像的CCImage版本:
I)来自文件:
CCImage *img= new CCImage(); img->initWithImageFile("colors.png");
II)来自雪碧:
> II.1)CCSprite – > RenderTexture2D
> II.2)RenderTexture2D – > CCImage(CCImage * testImage = RenderText2D-> newCCImage();)
那你可以做你需要的:
CCImage *img= ... // make CCImage from CCSprite int x=3; if(img->hasAlpha()) x=4; unsigned char *data = new unsigned char[img->getDataLen()*x]; data = img->getData(); // [0][0] => Left-Top Pixel ! // But cocos2d Location Y-axis is Bottom(0) to Top(max) for(int i=0;i<img->getWidth();i++) { for(int j=0;j<img->getHeight();j++) { unsigned char *pixel = data + (i + j * img->getWidth()) * x; // You can see/change pixels' RGBA value(0-255) here ! unsigned char r = *pixel; unsigned char g = *(pixel + 1); unsigned char b = *(pixel + 2) ; unsigned char a = *(pixel + 3); } }
然后,将其转换为texture_2D
//CCImage -> Texture2d texture_2D= new CCTexture2D(); texture_2D->initWithImage(img);
4.最后回到CCSprite
CCSprite *result= CCSprite::createWithTexture(texture_2D);