Domanda

Perché ho bisogno di questo?

Fondamentalmente ho bisogno di trasformare un'immagine a colori in scala di grigi.Compresa una versione in scala di grigi dell'immagine potrebbe essere una soluzione, ma lo spazio è stretto nella mia situazione - non voglio che il mio apk sia troppo grande.Inoltre, vorrei lavorare anche sui pixel per alcuni effetti.Di nuovo, questo è quello di rendere l'apk più piccolo.

Ho trovato getpixel setpixel da cctxture2d e Ottieni il pixel dell'immagine RGBA , ma vorrei qualcosa di più semplice.

Qualsiasi aiuto è apprezzato.

Grazie!

È stato utile?

Soluzione

Ecco la mia soluzione per te:

1. First crea una versione di ccimage della tua immagine:

i) Dal file:

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

II) da Sprite:

    .
  • II.1) CCSPRITE -> RENDERTEXTURE2D

  • ii.2) RenderTexture2D -> CCIMAGE (CCImage *testImage = RenderText2D->newCCImage();)

    2. Quindi puoi fare ciò di cui hai bisogno:

        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. Quindi, convertirlo in texture_2d

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

    4. E finalmente torna a ccsprite

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

Altri suggerimenti

Questo può essere fatto un paio di modi.Quello che ho fatto in passato è solo chiamato Setcolor sullo sprite a un po 'di colore vicino a ciò che stai cercando.Che aveva funzionato per i miei scopi.

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

Un'altra soluzione (più accurata e precisa): Come implementare il rendering in scala di grigi in OpenGL?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top