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