我为什么需要这个?

基本上,我需要将彩色图像转换为灰度图像。包括图像的灰度版本可能是一种解决方案,但是在我的情况下空间很小-我不希望我的APK太大。此外,我也想对像素进行一些效果处理。同样,这是为了使APK变小。

我已经找到getPixel setPixel from CCTexture2DGetting image's pixel RGBA,但是我想要更简单的东西。

任何帮助表示赞赏。

谢谢!

最佳答案

这是我为您提供的解决方案:
1.首先制作图像的CCImage版本:
我)从文件:

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(cocos2d-x)中像素的RGB/RGBA值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9665700/

    10-12 01:28