android - 在android中改变位图中的蓝色和红色 channel

标签 android image-processing bitmap cocos2d-x

我使用以下代码从位图中获取像素数据,然后将数组通过 JNI 传递到 cocos2dx。当我在 cocos2d-x 中渲染图像时,红色和蓝色 channel 是相反的。有没有办法分别访问像素的 int 值中的红色、蓝色 channel ,然后相互更改它们?

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

最佳答案

好吧,可能是我问这个问题太早了,没有太努力。

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

如果有人有不涉及迭代每个像素的更好答案,请在此处分享。

关于android - 在android中改变位图中的蓝色和红色 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15700714/

相关文章:

python opencv。我想获得 r=b=g 的像素值

image-processing - 照明不均匀的图像

android - 位图中的解码器错误

java - Android的decodeByteArray在自己的线程上非常慢,但在UI线程上却不是

android - 如何在android中的gridview中显示arraylist

java - R 无法解析为变量 - 在 Eclipse 中将 Android API 20 更新为新的 API 22 后

c# - 在 C# 中使用锁定位写入图像

android - 方法 getApplicationContext() 未定义,构造函数 DatePickerDialog 未定义

android - 警报对话框按钮具有不同的颜色集

android - 如何将位图缓存到 native 内存中