为什么我需要这个?

基本上我需要将彩色图像变为灰度。包括图像的灰度版本可能是一个解决方案,但空间在我的情况下紧张 - 我不希望我的apk太大。此外,我想也要在像素上工作一些效果。同样,这是使APK更小。

我已经找到了 getpixel setpixel从cctexture2d 获取图像的像素RGBA ,但我想更简单。

任何帮助都得到了赞赏。

谢谢!

有帮助吗?

解决方案

这是我的解决方案:

1.首先制作图像的CCIMAGE版本:

i)从文件:

CCImage *img=  new CCImage();
img->initWithImageFile("colors.png");
. 来自Sprite的

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.然后将它转换为纹理_2d

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

    4.最后回到CCSprite

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

其他提示

这可以做几种方式。我过去所做的就是刚刚被称为Sprite上的SetColor,以某种颜色接近你正在寻找的颜色。这是为了我的目的。

my_sprite.setColor(CCC3(128,128,128));

另一种解决方案(更彻底和精确): 如何在OpenGL中实现灰度渲染?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top