0%

Cocos2d-x中获取图片指定位置的RGBA值

创建 Image

  • 从文件创建:
1
2
cocos2d::Image *image = new cocos2d::Image();
image->initWithImageFile("file.png");
  • Sprite 创建:
1
2
3
4
5
6
7
// 创建 RenderTexture,代码根据具体情况修改
cocos2d::RenderTexture *rt = cocos2d::RenderTexture::create(w, h);
rt->begin();
sp->visit();
rt->end();
// 从 RenderTexture 获取 image
cocos2d::Image *image = rt->newImage();

获取像素信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cocos2d::Image *image; // 上文得到的 Image
int gap = 3; // 3: rgb, 4: rgba
bool hasAlpha = image->hasAlpha();
if (hasAlpha) {
gap = 4;
}
unsigned char *data = image->getData(); // 像素数据列表
/* data 从左上角([0][0])开始,先 x+ 轴向右,再 y- 轴向下
* 例如:一个 3x4 的图片,像素顺序为
* 1 2 3 4
* 5 6 7 8
* 9 10 11 12
*/
int width = image->getWidth();
int height = image->getHeight();
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
// 获取行为 j, 列为 i 的像素信息
unsigned char* pixel = data + (i + j * width) * gap;
// 获取 rgba 值,如果没有 alpha, a 值需要忽略
unsigned char r = *pixel;
unsigned char g = *(pixel + 1);
unsigned char b = *(pixel + 2) ;
unsigned char a = hasAlpha ? *(pixel + 3) : 255;
// 也可以使用 *pixel 来修改 rgba 值
}
}

使用 Image

1
2
3
4
5
// 使用 Image 生成 Texture2D
cocos2d::Texture2D *texture2D = new cocos2d::Texture2D();
texture2D->initWithImage(image);
// 使用 Texture2D 生成 Sprite
cocos2d::Sprite *sprite = cocos2d::Sprite::createWithTexture(texture2D);

参考链接