cocos2d-x 3.X 获取图片像素

请教一下,如何使用cocos2d-x 3.x获取图片的像素值?使用2.x参考网上的可以获取得到,但是使用3.x获取的rgba四个通道的值都是0.搞了一天也没有弄出是什么原因造成的,请问有人研究过这个吗?求解答。谢谢
参考网址:http://blog.csdn.net/oktears/article/details/37993871

3.x的渲染机制与2.x不一样,包括newCCImage在内的之后操作需要缓一帧

rendertexture存到image的代码放在init里面 不要每点一次生成image

可以的,调用rendertexture的时候加一句代码:如下

RenderTexture *render = RenderTexture::create(sprite_chess->getContentSize().width, sprite_chess->getContentSize().height,Texture2D::PixelFormat::RGBA8888);
render->beginWithClear(0.0f, 0.0f, 0.0f, 0.0f);
sprite_chess->visit();
render->end();
Director::getInstance()->getRenderer()->render(); //加这句

恩,谢谢。

加上这一句会在这一句崩溃。

我上次查了一下,3.x里面Alpha是为空的。具体怎么解决这个对应的问题还没有找到。不过有其他的方法解决,就是直接用精灵图片,不用render可以读取的到Alpha的值。

可以分享下你的方法吗?

ccColor4B c = {0, 0, 0, 0};
CCPoint pt = ccp(240,160);//要获取的点
unsigned int x = pt.x, y = pt.y;

CCImage * myimg = new CCImage();
//加载 图片
myimg->initWithImageFileThreadSafe(“HelloWorld1.png”);
unsigned char *data_=myimg->getData();
unsigned int *pixel = (unsigned int *)data_;
pixel = pixel + (y * 480) + x; //480 是图片的宽
c.r = *pixel & 0xff;
c.g = (*pixel >> 8) & 0xff;
c.b = (*pixel >> 16) & 0xff;
c.a = (*pixel >> 24) & 0xff; //这个值 就是透明度

完全没有考虑PixelFormat 的因素啊,data的存储格式不是固定的.

具体的怎么回事我也不是很清楚,这也是我搜查的资料,可以实现获取像素值

可以采用glReadPixels函数来获取,具体的可以看这篇博文,http://www.cnblogs.com/zjzyh/p/4077409.html

2.2.x的版本的时候,image里的data还都是用argb8888的格式存储的,3.0之后就变了
各种各样的格式

是的,2.x与3.x有很大的不同

glReadPixels函数没用, 它获取到的apha值永远不可能为0