android bitmap cocos2d-x ccsprite

[cocos2dx android] Rendering CCSprite usando datos sin formato de Bitmap



cocos2d-x (1)

EDITAR Así que acabo de notar una corrupción de imágenes en la esquina inferior derecha de la imagen. No estoy seguro de por qué sucede esto y cómo solucionarlo. ¿Algunas ideas?

EDITAR FIN

Respondiendo a mi propia pregunta, obtuve una matriz de bytes del mapa de bits usando:

byte[] data = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); pic.compress(Bitmap.CompressFormat.JPEG, 100, baos); data = baos.toByteArray();

Y luego pasó esta matriz de bytes al código nativo.

Estoy tratando de buscar una imagen de una URL en un mapa de bits y luego usando los datos sin procesar del mapa de bits estoy tratando de crear un CCSprite. El problema aquí es que la imagen está dañada cuando visualizo el sprite. Creé una aplicación independiente de Android (sin cocos2dx) y usé el mismo código para buscar y mostrar el mapa de bits y se muestra correctamente. ¿Alguna razón por la cual la imagen no se está procesando correctamente en cocos2dx?

Mi código para recuperar la imagen de la URL es:

String urlString = "http://www.mathewingram.com/work/wp-content/themes/thesis/rotator/335f69c5de_small.jpg";//http://graph.facebook.com/"+user.getId()+"/picture?type=large"; Bitmap pic = null; pic = BitmapFactory.decodeStream((InputStream) new URL(urlString).getContent()); int[] pixels = new int[pic.getWidth() * pic.getHeight()]; pic.getPixels(pixels, 0, pic.getWidth(), 0, 0,pic.getWidth(),pic.getHeight()); int len = pic.getWidth()* pic.getHeight(); nativeFbUserName(pixels,len,pic.getWidth(), pic.getHeight());

La función "nativeFbUserName" es una llamada a una función c ++ nativa que es:

void Java_com_WBS_Test0001_Test0001_nativeFbUserName(JNIEnv *env, jobject thiz,jintArray name, jint len, jint width, jint height) { jint *jArr = env->GetIntArrayElements(name,NULL); int username[len]; for (int i=0; i<len; i++){ username[i] = (int)jArr[i]; } HelloWorld::getShared()->picLen = (int)len; HelloWorld::getShared()->picHeight = (int)height; HelloWorld::getShared()->picWidth = (int)width; HelloWorld::getShared()->saveArray(username); HelloWorld::getShared()->schedule(SEL_SCHEDULE(&HelloWorld::addSprite),0.1); } void HelloWorld::saveArray(int *arrayToSave) { arr = new int[picLen]; for(int i = 0; i < picLen; i++){ arr[i] = arrayToSave[i]; } } void HelloWorld::addSprite(float time) { this->unschedule(SEL_SCHEDULE(&HelloWorld::addSprite)); CCTexture2D *tex = new CCTexture2D(); bool val = tex->initWithData(arr,(cocos2d::CCTexture2DPixelFormat)0,picWidth,picHeight, CCSizeMake(picWidth,picHeight)); CCLog("flag is %d",val); CCSprite *spriteToAdd = CCSprite::createWithTexture(tex); spriteToAdd->setPosition(ccp(500, 300)); this->addChild(spriteToAdd); }

Editar: Encontré este enlace Acceso a datos sin procesar en ARGB_8888 Mapa de bits de Android que indica que podría ser un error. ¿Alguien ha encontrado una solución a esto?