gpt4 book ai didi

android - Inter 在 android 位图中更改蓝色和红色 channel

转载 作者:行者123 更新时间:2023-11-29 00:31:02 26 4
gpt4 key购买 nike

我正在使用以下代码从位图中获取像素数据,然后通过 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 - Inter 在 android 位图中更改蓝色和红色 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15700714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com