获取和设置CCSprite中像素的RGB/RGBA值(cocos2d-x)

前端之家收集整理的这篇文章主要介绍了获取和设置CCSprite中像素的RGB/RGBA值(cocos2d-x)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我为什么需要这个?

基本上我需要将彩色图像变成灰度.包括灰度版本的图像可能是一个解决方案,但在我的情况下空间紧张 – 我不希望我的APK太大.此外,我也想研究一些效果的像素.再次,这是为了使APK更小.

我找到了getPixel setPixel from CCTexture2DGetting 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);

猜你在找的CSS相关文章