6

なぜこれが必要なのですか?

基本的に、カラー画像をグレースケールに変換する必要があります。画像のグレースケールバージョンを含めることは解決策かもしれませんが、私の状況ではスペースが限られています-APKが大きくなりすぎないようにします。その上、私はいくつかの効果のためにもピクセルに取り組みたいと思います。繰り返しますが、これはAPKを小さくするためです。

CCTexture2DからgetPixelsetPixelを見つけ、画像のピクセルRGBAを取得していますが、もっと簡単なものが欲しいです。

どんな助けでも大歓迎です。

ありがとうございました!

4

2 に答える 2

7

これがあなたのための私の解決策です:

1.最初に画像のCCImageバージョンを作成します。

I)ファイルから:

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);
于 2013-08-22T16:53:10.293 に答える
0

これはいくつかの方法で行うことができます。私が過去に行ったことは、スプライトのsetColorを、探しているものに近い色に呼び出すことです。それは私の目的のために働いていました。

my_sprite.setColor(ccc3(128、128、128));

別の解決策(より徹底的かつ正確): OpenGLでグレースケールレンダリングを実装する方法は?

于 2012-03-13T01:03:55.963 に答える