请教一下,如何使用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的存储格式不是固定的.
具体的怎么回事我也不是很清楚,这也是我搜查的资料,可以实现获取像素值
2.2.x的版本的时候,image里的data还都是用argb8888的格式存储的,3.0之后就变了
各种各样的格式
是的,2.x与3.x有很大的不同
glReadPixels函数没用, 它获取到的apha值永远不可能为0