Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中位图中蓝色和红色通道的交互更改_Android_Image Processing_Bitmap_Cocos2d X - Fatal编程技术网

android中位图中蓝色和红色通道的交互更改

android中位图中蓝色和红色通道的交互更改,android,image-processing,bitmap,cocos2d-x,Android,Image Processing,Bitmap,Cocos2d X,我使用以下代码从位图中获取像素数据,然后通过JNI将数组传递给cocos2dx。在cocos2d-x中渲染图像时,红色通道和蓝色通道反转。有没有一种方法可以分别从像素的int值访问红色和蓝色通道,然后相互更改它们 JAVA代码 int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()]; bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getW

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

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);
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);
}
    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);
JNI代码

    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);
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);
}
    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);
JNIEXPORT void JNICALL Java_com_xxxx_yyyyyo_yyyyo_onfacebookmagenative(JNIEnv*env,jobject,
jint阵列像素、jint数据长度、jint宽度、jint高度、jint比特组件)
{
yyyyo*yyyyo=yyyyo::singleton();
jint*jArr=env->GetIntArrayElements(像素,空);
int pixelsInt[dataLen];
对于(int i=0;ionFacebookImage(像素)(int)dataLen,
CCImage::kFmtRawData,(int)宽度,(int)高度,(int)位组件);
}

好吧,也许我问这个问题太早了,但没有尽力

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);
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);
}
    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);
int[]像素=新的int[bitmap.getWidth()*bitmap.getHeight()];
getPixels(像素,0,bitmap.getWidth(),0,0,bitmap.getWidth(),bitmap.getHeight());
int[]finalArray=new int[bitmap.getWidth()*bitmap.getHeight()];
对于(int i=0;i

如果有人有一个更好的答案,不需要迭代每个像素,请在这里分享。

虽然有点晚,但我会回答。你可以使用ColorMatrix将所有蓝色转换为红色,反之亦然,然后使用该ColorMatrix将原始图像绘制为空图像。