2

次のコードを使用してビットマップからピクセル データを取得し、配列を JNI 経由で cocos2dx に渡します。cocos2d-x で画像をレンダリングすると、赤と青のチャンネルが逆になります。ピクセルの int 値とは別に赤、青のチャネルにアクセスして、それらを交換する方法はありますか?

ジャバコード

    int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
    bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
    int len = bitmap.getWidth() * bitmap.getHeight();
    onFacebookImageNative(pixels, len, bitmap.getWidth(), bitmap.getHeight(), bitsPerComponent);

JNI コード

JNIEXPORT void JNICALL Java_com_xxxx_yyyyo_yyyyo_onFacebookImageNative(JNIEnv* env, jobject,
    jintArray pixels, jint dataLen, jint width, jint height, jint bitsPerComponent)
{
yyyyo *yyyyo = yyyyo::singleton();

jint *jArr = env->GetIntArrayElements(pixels, NULL);
int pixelsInt[dataLen];
for (int i=0; i<dataLen; i++){
    pixelsInt[i] = (int)jArr[i];
}

yyyyo->onFacebookImage(pixelsInt, (int) dataLen,
        CCImage::kFmtRawData, (int) width, (int) height, (int) bitsPerComponent);
}
4

1 に答える 1

2

わかりました、あまり頑張らずに質問するのが早すぎたのかもしれません。

ジャバコード

    int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
    bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

    int[] finalArray = new int[bitmap.getWidth() * bitmap.getHeight()];

    for(int i = 0; i < len; i++) {

    int red = Color.red(pixels[i]);
    int green = Color.green(pixels[i]);
    int blue = Color.blue(pixels[i]);
    finalArray[i] = Color.rgb(blue, green, red);//invert sequence here.
    }


    int len = bitmap.getWidth() * bitmap.getHeight();
    onFacebookImageNative(pixels, len, bitmap.getWidth(), bitmap.getHeight(), bitsPerComponent);

各ピクセルを繰り返し処理する必要のない、より良い答えを誰かが持っている場合は、ここで共有してください。

于 2013-03-29T09:59:15.620 に答える