彩色图转灰度图算法 cocos2dx实现
2013-06-09 14:23
393 查看
备忘一下.
//得到灰度CCSprite, int l_iGrayValue = (int)(l_iR*0.299 + l_iG*0.587 + l_iB*0.114);
CCSprite* Tools::getGraySpriteWithFile(const char* p_file){
CCSprite* l_sprite = Tools::getSpriteWithFile(p_file);
CCSize l_sizeInPixel = l_sprite->getContentSizeInPixels();
//开辟出内存buffer
unsigned char* l_buffer = (unsigned char*)malloc(l_sizeInPixel.width * l_sizeInPixel.height * 4);
memset(l_buffer, 0, l_sizeInPixel.width * l_sizeInPixel.height * 4);
//写内存
CCRenderTexture* l_renderTexture = CCRenderTexture::renderTextureWithWidthAndHeight(l_sizeInPixel.width, l_sizeInPixel.height, kCCTexture2DPixelFormat_RGBA8888);
l_renderTexture->begin();
l_sprite->draw();
glReadPixels(0, 0, l_sizeInPixel.width, l_sizeInPixel.height, GL_RGBA, GL_UNSIGNED_BYTE, l_buffer);
l_renderTexture->end();
//变成灰度内存
for (int i=0; i<l_sizeInPixel.height; i++) {
for (int j=0; j<l_sizeInPixel.width; j++) {
CCPoint l_pointInPixel = ccp(j, i);
//l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+3] = 0;
int l_iR = l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+0];
int l_iG = l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+1];
int l_iB = l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+2];
int l_iGrayValue = (int)(l_iR*0.299 + l_iG*0.587 + l_iB*0.114);
l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+0] = l_iGrayValue;
l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+1] = l_iGrayValue;
l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+2] = l_iGrayValue;
}
}
//生成灰度CCSprite
CCTexture2D* l_texture = new CCTexture2D();
l_texture->initWithData(l_buffer, kTexture2DPixelFormat_RGBA8888, l_sizeInPixel.width, l_sizeInPixel.height,CCSizeMake(l_sizeInPixel.width, l_sizeInPixel.height));
l_texture->autorelease();
CCSprite* l_spriteGray = CCSprite::spriteWithTexture(l_texture);
//释放临时内存
free(l_buffer);
return l_spriteGray;
}
本文原创, 转载请注明出处!
//得到灰度CCSprite, int l_iGrayValue = (int)(l_iR*0.299 + l_iG*0.587 + l_iB*0.114);
CCSprite* Tools::getGraySpriteWithFile(const char* p_file){
CCSprite* l_sprite = Tools::getSpriteWithFile(p_file);
CCSize l_sizeInPixel = l_sprite->getContentSizeInPixels();
//开辟出内存buffer
unsigned char* l_buffer = (unsigned char*)malloc(l_sizeInPixel.width * l_sizeInPixel.height * 4);
memset(l_buffer, 0, l_sizeInPixel.width * l_sizeInPixel.height * 4);
//写内存
CCRenderTexture* l_renderTexture = CCRenderTexture::renderTextureWithWidthAndHeight(l_sizeInPixel.width, l_sizeInPixel.height, kCCTexture2DPixelFormat_RGBA8888);
l_renderTexture->begin();
l_sprite->draw();
glReadPixels(0, 0, l_sizeInPixel.width, l_sizeInPixel.height, GL_RGBA, GL_UNSIGNED_BYTE, l_buffer);
l_renderTexture->end();
//变成灰度内存
for (int i=0; i<l_sizeInPixel.height; i++) {
for (int j=0; j<l_sizeInPixel.width; j++) {
CCPoint l_pointInPixel = ccp(j, i);
//l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+3] = 0;
int l_iR = l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+0];
int l_iG = l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+1];
int l_iB = l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+2];
int l_iGrayValue = (int)(l_iR*0.299 + l_iG*0.587 + l_iB*0.114);
l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+0] = l_iGrayValue;
l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+1] = l_iGrayValue;
l_buffer[4*(int)(l_pointInPixel.y*l_sizeInPixel.width + l_pointInPixel.x)+2] = l_iGrayValue;
}
}
//生成灰度CCSprite
CCTexture2D* l_texture = new CCTexture2D();
l_texture->initWithData(l_buffer, kTexture2DPixelFormat_RGBA8888, l_sizeInPixel.width, l_sizeInPixel.height,CCSizeMake(l_sizeInPixel.width, l_sizeInPixel.height));
l_texture->autorelease();
CCSprite* l_spriteGray = CCSprite::spriteWithTexture(l_texture);
//释放临时内存
free(l_buffer);
return l_spriteGray;
}
本文原创, 转载请注明出处!
相关文章推荐
- cocos2dx实现 彩色图转灰度图算法
- 32位彩色图像转换成256级灰度图的算法
- c#_灰度图,二值化,腐蚀算法等具体实现
- cocos2dx 3.x 实现 A星(A*)(A-star)算法自动寻路(一)
- PhotoShop算法实现--伪彩色图像处理(八)
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
- 解析C#彩色图像灰度化算法的实现代码详解
- cocos2dx游戏中A*寻路算法的实现
- 彩色转灰度算法(FPGA实现)
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
- 解析C#彩色图像灰度化算法的实现代码详解
- C++实现类似Matlab的colormap Jet(灰度图生成彩色热度图)
- 图像配准 - 三张灰度图合成彩色图 ECC算法 OpenCV C++/Python实现
- 灰度图的旋转角度算法 VS opencv实现
- PS 图像黑白调整算法(彩色图转灰度图)(VC++)
- opencv+cuda实现彩色图转灰度图或二值化
- 基于FPGA的彩色图像转灰度算法实现
- OpenCV实现彩色图像转换为灰度图及二值化处理
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题