2013-03-29 42 views
2

我使用以下代碼從位圖獲取像素數據,然後通過JNI將數組傳遞給cocos2dx。當我在cocos2d-x中渲染圖像時,紅色和藍色通道反轉。有沒有辦法從像素的int值中分別訪問紅色,藍色通道,然後相互交換它們?相互更改位圖中的藍色和紅色通道android

Java代碼

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); 
} 

回答

2

好了,可能是我問酒吧毫不費力太早的問題。

Java代碼

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); 

如果任何人有一個更好的答案,不涉及通過每個像素迭代,那麼請在這裏分享。

+0

這有點晚,但我會回答。您可以使用ColorMatrix將所有藍色轉換爲紅色,反之亦然,然後使用該ColorMatrix繪製原始圖像以清空一個。 – holtaf

相關問題