Question

Pourquoi ai-je besoin de cela?

Fondamentalement, je dois transformer une image couleur en échelle de gris.Y compris une version à échelle grise de l'image pourrait être une solution, mais l'espace est serré dans ma situation - je ne veux pas que mon APK soit trop gros.En outre, j'aimerais travailler sur les pixels pour certains effets.Encore une fois, il s'agit de rendre l'apk plus petit.

J'ai trouvé getPixel Setpixel de cctexture2D et Pixel RGBA d'Image, mais je voudrais quelque chose de plus simple.

Toute aide est appréciée.

Merci!

Était-ce utile?

La solution

Voici ma solution pour vous:

1.First fait une version ccimage de votre image:

i) du fichier:

CCImage *img=  new CCImage();
img->initWithImageFile("colors.png");

ii) de Sprite:

  • II.1) CCSPRITE -> Rendertexture2D

  • II.2) Rendertexture2D -> CCIMAGE (CCImage *testImage = RenderText2D->newCCImage();)

    2.Cherchez que vous pouvez faire ce dont vous avez besoin:

        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.then, convertissez-le en texture_2d

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

    4. Et enfin, revenez à ccsprite

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

Autres conseils

Cela peut être fait quelques façons.Ce que j'ai fait dans le passé, c'est simplement appelé SetColor sur le sprite à une couleur proche de ce que vous recherchez.Cela avait travaillé pour mes fins.

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

Une autre solution (plus complète et précise): Comment implémenter le rendu en niveaux de gris dans OpenGL?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top