[cocos2dx机器人]使用从位图的原始数据渲染CCSprite([cocos2dx androi

2019-08-16 20:00发布

我试图从URL的图像读取到一个位图,然后使用从位图的原始数据我想创建一个CCSprite。 这里的问题是,当我显示精灵的形象已损坏。 我创建了一个独立的机器人仅应用(无cocos2dx)和所使用的相同的代码来获取并显示该位图,它的正确显示。 任何理由图像没有被正确的cocos2dx呈现?

从URL是我的代码来获取图像:

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

函数“nativeFbUserName”是与天然C ++函数,它是一个电话:

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

编辑:所以我发现这个链接到原始数据ARGB_8888 Android的位图访问 ,指出这可能是一个错误。 有没有人找到一个解决的办法?

Answer 1:

编辑所以我只注意到图像的腐败对image.I的右下角我不知道为什么发生这种情况,以及如何解决它。 有任何想法吗?

编辑结束

回答我的问题,我从获得使用位图的字节数组:

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

然后通过这个字节数组的本地代码。



文章来源: [cocos2dx android]Rendering CCSprite using raw data from Bitmap