CCImage像素分析问题

最近在做一个类似于刮奖效果的游戏,想实现图片擦除后的像素检测逻辑,参考网上的一些文章,C++实现方式是

CCImage* image = pRenderTexture->newCCImage(true);    
unsigned char *data_= image->getData();   
//todo 分析data里的像素信息

但是我使用lua开发的(cocos2dx3.4),代码如下

local image = self._renderTexture:newImage()
--local hasAlpha = image:hasAlpha() --调用ok
--local bitPerPixel = image:getBitPerPixel() --调用ok
local data_ = image:getData() --报错attempt to call method 'getData' (a nil value)

在调用getData()方法时报错,看了下lua的导出配置,发现这个方法是被忽略掉的,没有被导出到lua,然后自己尝试将其从忽略列表里移除,重新导出给工程使用,但是还是报同样错误,猜想这个方法的返回值比较特殊,不能导出给lua使用。

目前想到的解决方案就是C++里自己实现一个工具类,在工具类里去调用getData()方法,然后将返回值重新包装返回给lua

unsigned char *data_= image->getData();  
//封装数据返回给lua

但是这样做比较麻烦,另外用gl.readPixels()方法可以读取像素信息,但是他读取的是整个屏幕的,而不是某个texture的,我的需求是具体分析某个图层的texture信息,请问lua里要做像素分析有什么好的实现方法吗?谢谢大家了。

那就直接在c++里封装一个检测的方法,把接口调给lua

1赞

屏幕和texture已经没有什么对应关系了。glReadPixels是可以指定读取范围的,所以你应该知道要读取屏幕的哪块内容。

没什么办法,只好这样弄了

glReadPixels读取的是混合后的颜色,所以如果底层有一张完全不透明的图片的话,glReadPixels读取的所有像素的alpha值都是255,所以这个实现不了我的需求
获取指定renderTexture的像素信息,相当于得到了游戏里某一个精灵的像素信息。

CCImage* image = renderTexture->newCCImage();
unsigned char *data = image->getData();

这样才能做具体的像素检测