Pregunta

¿Por qué necesito esto?

Básicamente, necesito convertir una imagen en color en escala gris.Incluir una versión de escala gris de la imagen podría ser una solución, pero el espacio está apretado en mi situación, no quiero que mi APK sea demasiado grande.Además, me gustaría trabajar en los píxeles para algunos efectos también.Una vez más, esto es para hacer que el APK sea más pequeño.

He encontrado getpixel setpixel de ctexture2d y pixel rgba de la imagen, pero me gustaría algo más simple.

Se aprecia cualquier ayuda.

¡Gracias!

¿Fue útil?

Solución

Aquí está mi solución para usted:

1.first Haz una versión CCIMage de su imagen:

i) del archivo:

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

ii) del sprite:

  • II.1) CCSPRITE -> RENDERTEXTRIE2D

  • II.2) RENDERTEXTRIO2D -> CCIMA (CCImage *testImage = RenderText2D->newCCImage();)

    2.En podrá hacer lo que necesita:

        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.Ten, conviértela a Texture_2D

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

    4. y finalmente de vuelta a ccsprite

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

Otros consejos

Esto se puede hacer un par de maneras.Lo que he hecho en el pasado es simplemente llamar a SetColor en el sprite a un poco de color cerca de lo que está buscando.Que había trabajado para mis propósitos.

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

Otra solución (más completa y precisa): ¿Cómo implementar la representación en escala de grises en OpenGL?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top