cocos2dx如何通过Image获取指定点颜色值

本文记录了作者在Cocos2dx中实现通过Image获取指定点颜色值的过程,详细描述了遇到的问题及解决方法。作者从Sprite点击事件出发,利用Image加载图片并获取颜色值,但初始尝试因使用错误的图片资源导致失败。通过调整到正确的图片,最终成功获取颜色值。代码示例和相关资源链接已提供。
摘要由CSDN通过智能技术生成

这个问题整整用了我一天,直到后来我在网上直接下载到了我中意的颜色图片,我的程序才真正的正确的运转起来。代码可以在这里下载:https://github.com/panshiqu/board

我现在描述一下需求,Sprite直接加载一张图片,响应点击事件,获取点击坐标值,通过Image加载该图片来获取点击的颜色值,我个人觉得理论知识就那么简单,首先感谢该篇文章的主人:http://www.cnblogs.com/jaoye/archive/2013/02/19/2916501.html,这里可以学到如何使用Image获取颜色值。

有一个问题,他在计算的时候是这样写的

pixel = pixel + (y * 480) + x;
若他是正确的,我就只能假定他是以图片的左上角为原点计算的,因为图片加载我在这里假想一下,它是从左上角那个点开始,一行一行进行加载的,我极端的举一个例子,若坐标(100,0)我们取到的肯定是图片第一行第一百像素点的颜色值。相较于正确的坐标系来讲(原点(0,0)),若图片的高度是480的话,我们真正取到像素的坐标其实是(100,480)。我只能说明到这里了,希望能看懂。

我还要再抛一个问题,0x80FFFF00是50%透明的黄色,这句话是我在别的地方看到的,应该是准确的,第一个byte位是透明度,若按照ARGB的先后顺序来理解的话,末尾的byte应该是blue,然后遗憾的是red,当我使用正确的图片资源时(下面会解释),颜色值能取对,我想方法应该是没有问题的,暂且留下这个疑问。

为什么是正确的图片资源,事先为做测试,我是通过QQ截屏截的是Windows画图程序中的选择颜色线条状的图片,无论我怎么尝试,甚至颠覆理论去理解,但是颜色总是取的不对,后来我为了减轻难度我又截屏Windows画图程序中的选择颜色方格的图片,结果依然是不行。这里我不想骂这个截屏功能,可能是因为我的无知才导致了这场悲剧的发生。

首先我上传图片资源:


接下来我贴出我的代码资源(三段代码哦):

	_colorPicker = Sprite::create("ColorPickerNew.png");
	_colorPicker->setPosition(_colorPicker->getContentSize().width / 2, _colorPicker->getContentSize().height / 2);
	this->addChild(_colorPicker);

	_colorImage = new Image();
	_colorImage->initWithImageFile("ColorPickerNew.png");

bool SettingLayer::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
	Point location = touch->getLocation();
	if (_colorPicker->getBoundingBox().containsPoint(location)) {
		unsigned char *data = _colorImage->getData();
		unsigned int *pixel = (unsigned int *)data;
		pixel = pixel + (220 * (unsigned int)(220 - location.y)) + (unsigned int)location.x;
		BoardScene *runingScene = (BoardScene *)Director::getInstance()->getRunningScene();
		runingScene->setColor(*pixel);
		return true;
	}

	return false;
}

void BoardLayer::setColor(unsigned int color)
{
	GLubyte r = color & 0xff;
	GLubyte g = (color >> 8) & 0xff;
	GLubyte b = (color >> 16) & 0xff;
	GLubyte a = (color >> 24) & 0xff;
	_drawColor = Color4F(Color4B(r, g, b, a));
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值