//一下是获取某个像素的透明值,以此类推可以回去r,g,b的值
Image *myImage = new Image();
myImage->initWithImageFile("test.png");
unsigned char *data = myImage->getData();  //这里就是图片数据了
//根据刚刚计算的相对坐标值,计算出触摸点代表了哪一个像素点      然后再提取出该像素点的alpha值
//注意:因为图片坐标(0,0)是在左上角,所以要和触摸点的Y转换一下,也就是“(myImage->getHeight() - (int)(ps.y) - 1)”
//该data值是把二维数组展开成一个一维数组,因为每个像素值由RGBA组成,所以每隔4个char为一个RGBA,并且像素以横向排列
int pa = 4 * ((myImage->getHeight() - (int)(ps.y) - 1) * myImage->getWidth() + (int)(ps.x)) + 3;
unsigned int ap = data[pa];

转:https://blog.zengrong.net/post/2104.html

我采用的是这种办法。流程如下:

  1. 在需要图片像素值的时候,将这张图片使用 FrameBuffer 重新绘制成像素;
  2. 获得相关像素的颜色值;
  3. 删除已经获得的像素。

这种方法的弊端如下:

  1. 如果要取得的像素图片巨大,可能对性能有影响;
  2. 每次的数据没有缓存,频繁执行的话性能消耗巨大。

当然,如果确实需要在同一张图片上多次操作,缓存可以程序员自己来做。

为了实现这个流程,我修改了 CCImage.h,增加了两个方法 getColor4B 和 getColor4F :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ccColor4B getColor4B(float x, float y)
{ccColor4B color = { 0, 0, 0, 0 };int ix = (int)x - 1;int iy = (int)y - 1;m_pData += (iy*getWidth() + ix) * 4;color.r = *(m_pData++);color.g = *(m_pData++);color.b = *(m_pData++);color.a = *(m_pData++);return color;
};ccColor4F getColor4F(float x, float y)
{return ccc4FFromccc4B(getColor4B(x, y));
};

2014-10-24更新:上面的代码没有考虑越界问题,在传递的坐标不在图像中时,程序会崩溃。

最新的代码改正了问题,请参考 github 。

由于 CCImage 是跨平台实现的,所以放在头文件中比放在实现文件中要方便许多。否则,就需要在 CCImage 的若干个平台相关实现中分别执行实现了。

下面是 quick-cocos2d-x 中的实现代码,我将其放在了 CCSpriteExtned.lua 框架中,这样能让所有的 CCSprite 实例都支持这个方法。

具体的实现请看代码,不解释了。

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-- NOTE!!! The method is very slowly! Please use it in carefully.
-- @param __point A coordinate for color.
-- @param __convertToNodeSpace Optional, default is true, convert a coordinate to node space from world space.
-- @param __isFloat Optional, default is false, convert a coordinate to node space from world space.
function CCSpriteExtend:getColor(__point, __convertToNodeSpace, __isFloat)if __convertToNodeSpace == nil then__convertToNodeSpace = trueendif __convertToNodeSpace then__point = self:convertToNodeSpace(__point)end-- Create a new Texture to get the pixel datas.local __size = self:getContentSize()local __rt = CCRenderTexture:create(__size.width, __size.height)-- Hold the old anchor and position to restore it late on.local __oldAnchor = self:getAnchorPoint()local __oldPos = self:getPositionInCCPoint()-- Move the sprite to left bottom.self:align(display.LEFT_BOTTOM, 0,0)--print("getColor:", __point.x, __point.y, __size.width, __size.height)-- Render the sprite to get a new texture.__rt:begin();self:visit()__rt:endToLua();-- Restore the original anchor and position.self:setAnchorPoint(__oldAnchor)self:setPosition(__oldPos)local __img = __rt:newCCImage(false)local __color = nilif __isFloat then__color = __img:getColor4F(__point.x, __point.y)else__color = __img:getColor4B(__point.x, __point.y)endreturn __color, __rt
end-- Only get a alpha value.
function CCSpriteExtend:getColorAlpha(__point, __convertToNodeSpace, __isFloat)local color = self:getColor(__point, __convertToNodeSpace, __isFloat)return color.a
en

这个方法已经合并进入 quick-cocos2d-x 的 develop 分支。

2014-10-24更新:由于 newCCImage 方法在 C++ 中是请求堆内存并返回一个指针。因此必须手动释放。上面的代码没有考虑释放问题,将会导致内存泄露。

最新的代码改正了问题,请参考 github 。

cocos获取图片像素相关推荐

  1. 获取图片像素颜色,转换为CSS3 box-shadow显示

    原理: 1.使用FileReader 读取图片 2.使用canvas 的 getImageData 获取图片像素信息 3.将像素信息转换为CSS3 box-shadow 代码: <!DOCTYP ...

  2. js获取图片像素颜色,修改图片像素颜色

    直接上代码示例 <!DOCTYPE HTML PUBLIC> <html><head><meta charset="utf-8">& ...

  3. android中获取图片、获取图片像素、处理像素等基础知识

    一.android获取图片的主要方法. (1).利用BitmapFactory.decode..各种方式获取资源.sd卡的图片,从这可以看出android都是以位图的形式加载的图片的,jpg.png等 ...

  4. python获取图片像素矩阵_用python处理图片实现图像中的像素访问

    这篇文章主要介绍了关于用python处理图片实现图像中的像素访问,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然 ...

  5. android 获取图片像素密度,android 获取屏幕的密度和像素 点

    经过测试发现屏幕的像素点 如果 density =1 那么 1dp = 1px density =2 那么 1dp = 2px density =3 那么 1dp = 3px 在字体设置的时候用dp比 ...

  6. opencv获取图片像素坐标_利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)(一)

    ​某城市会展中心室内地图 背景 一名室内设计师的日常工作从设计一张会展地图开始.常常有这样的场景:划分除规范的展位后,进入销售阶段,频繁的需要修改这张地图,如展示拆分.合并.换位置.标记已交易. 问题 ...

  7. swift获取图片像素颜色值

    extension UIImage{/**获取图片中的像素颜色值- parameter pos: 图片中的位置- returns: 颜色值*/func getPixelColor(pos:CGPoin ...

  8. PS笔记:获取图片像素坐标

    1.菜单栏->窗口->信息 2.然后将图片与到画板的左上角对齐 3.在图像上移动鼠标,即可在信息面板中查看相关像素信息

  9. java 获取图片像素_转:java提取图片中的像素

    本文转自:http://www.infosys.tuwien.ac.at/teaching/courses/WebEngineering/References/java/docs/api/java/a ...

最新文章

  1. haproxy,lvs keepalived || heartbeat,nginx对比
  2. ML之SVM:调用(sklearn的lfw_people函数在线下载55个外国人图片文件夹数据集)来精确实现人脸识别并提取人脸特征向量
  3. saltstack 基础入门文档
  4. mysql not in优化_实践中如何优化MySQL(收藏)
  5. dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成
  6. tensorflow 读取cifar_对tensorflow中cifar-10文档的Read操作详解
  7. SpringCloud工作笔记071---mysql字符集 utf8 和utf8mb4 的区别_utf8是不能存储emoji表情字符集的
  8. PyTorch:tensor-数学API
  9. python 货币换算库,货币转换python代码你知道怎么写吗?
  10. 「技术」智能温室可升降吊挂式草莓立体无土栽培技术分析
  11. 壁面函数matlab,Y+的查看及FLUENT壁面函数的选择
  12. hspace在表格中无效吗html,HTML代码汇总详解
  13. 微信小助手简版 WeChatSeptet for Mac安装教程!
  14. 支付公司如何赚钱?支付网关如何设计?
  15. leetcode | 回文数
  16. python白森_江白森002.
  17. 前端小白Day6-仿照百度制作登录界面
  18. c# winform 解决PictureBox 无法打印全部图片的问题
  19. Spring AOP组合使用多个切入点表达式
  20. gms认证流程_Google GMS认证要求与申请流程

热门文章

  1. 收藏别人的《设计模式》
  2. 关于调整部分车站互联网、电话订票起售时间的公告
  3. 第九篇论文读后总结-相似森林
  4. 两次考研失利!但这一次「我没输」
  5. 衡量基因相对表达量的RPKM、FPKM、TPM详解
  6. 多模态理论张德禄_学术会议 | 适用语言学与多模态国际会议
  7. 域名解析配置 以及 修改DNS服务器(腾讯云域名注册商、阿里云DNS服务器)
  8. 123457123456#0#-----com.threeapp.MakerHanBao01----儿童汉堡制作游戏
  9. [bzoj4084][Sdoi2015]双旋转字符串_hash
  10. 基于Java开发一套完整的区块链系统(附源码)