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

标签 rgb ccsprite grayscale 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();)

2.然后你就可以做你需要的事情了:

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

3.然后,将其转换为texture_2D

//CCImage -> Texture2d
    texture_2D= new CCTexture2D();
    texture_2D->initWithImage(img);

4.最后回到CCSprite

CCSprite *result=  CCSprite::createWithTexture(texture_2D);

关于rgb - 获取和设置 CCSprite 中像素的 RGB/RGBA 值 (cocos2d-x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9665700/

相关文章:

ios - 此行的正确内存管理? (Cocos2D)

时间:2019-01-17 标签:c#mat2gray(matlab)function

java - 如何在java中从包含灰度整数的文件文本中显示图像?

python - 将 QPixmap 转换为灰度图

java - 如何在 BufferedImage 中设置 XYZ-ColorSpace 像素?

rgb 值的 Javascript 正则表达式

ios - 我的重力有什么问题?

matlab - 转换RGB 2 HSV时出现 block 伪影

javascript - RGB转十六进制和十六进制转RGB