cocos2d-x中使图片背景全透明(另一种方法)

简介: <ol class="dp-css none_number" start="1" style="word-wrap:break-word; margin:0px 1px 0px 0px; padding:5px 0pt; list-style:none outside none; color:rgb(92,92,92); line-height:1.3; font-family:Conso
  1. CCLayerColor::initWithColor(ccc4(255,255,255,255));

  2.         CCImage *pImage = new CCImage();
  3.         pImage->autorelease();
  4.         pImage->initWithImageFile("arraw.png",CCImage::EImageFormat::kFmtPng);

  5.         //遍历图片的所有像素.
  6.         unsigned char *pData = pImage->getData();
  7.         int nPixelIndex = 0;
  8.         for (int nCol = 0; nCol < pImage->getHeight(); nCol ++)
  9.         {
  10.             for (int nRow = 0; nRow < pImage->getWidth(); nRow ++)
  11.             {
  12.                 //取图片的RGB值.
  13.                 int nBeginPos = nPixelIndex;
  14.                 unsigned int nRValue = pData[nPixelIndex];
  15.                 nPixelIndex++;
  16.                 unsigned int nGValue = pData[nPixelIndex];
  17.                 nPixelIndex ++;
  18.                 unsigned int nBValue = pData[nPixelIndex];
  19.                 nPixelIndex ++;
  20.                 unsigned int nAValue = pData[nPixelIndex];
  21.                 nPixelIndex ++;
  22.             
  23.                 int nAlphaRatio = 0;
  24.                 //本代码的核心:取RGB中的最大值赋给nAlphaRatio。如果nAlphaRatio为0,则像素中的alpha通道就为0,否则像素中的 
  25.                 //alpha通道值就是nAlphaRatio。这样做是为了在图片中颜色渐变过渡比较大的区域实现平滑的过渡。让最终形成的
  26.                 //图片看起来不粗糙.
  27.                 nAlphaRatio = nRValue>nGValue?(nRValue>nBValue?nRValue:nBValue):(nGValue>nBValue?nGValue:nBValue);
  28.                 if(nAlphaRatio != 0)
  29.                 {
  30.                     nAValue = nAlphaRatio;
  31.                 }
  32.                 else
  33.                 {
  34.                     nAValue= 0;
  35.                 }

  36.                 pData[nBeginPos] = (unsigned char)nRValue;
  37.                 pData[nBeginPos+ 1] = (unsigned char)nGValue;
  38.                 pData[nBeginPos + 2] = (unsigned char)nBValue;
  39.                 //修改原图的alpha值.
  40.                 pData[nBeginPos + 3] = (unsigned char)nAValue;
  41.             }
  42.         }

  43.         CCTexture2D *pTexture = new CCTexture2D;
  44.         pTexture->autorelease();
  45.         pTexture->initWithImage(pImage);
  46.         CCTexture2DPixelFormat ccpf = pTexture->getPixelFormat();
  47.         CCAssert(ccpf == kTexture2DPixelFormat_RGBA8888, "your png file's pixel format is not RGBA8888 or not have alpha panel");

  48.         CCSprite* pArrowSprite= new CCSprite();
  49.         pArrowSprite->initWithTexture(pTexture);
  50.         CCSize size = CCDirector::sharedDirector()->getWinSize();
  51.         pArrowSprite->setPosition(ccp(size.width/+ 20, size.height/- 20));
  52.         this->addChild(pArrowSprite, 6);
直接看代码注释就懂了。贴上效果图,打完收工。

相关文章
|
3月前
|
前端开发 图形学
小功能⭐️3DCanvas交互方法、Unity自动调整文本框大小、改变文字大小和颜色
小功能⭐️3DCanvas交互方法、Unity自动调整文本框大小、改变文字大小和颜色
|
机器学习/深度学习 缓存 人机交互
OpenCV-实现背景分离(可用于更改证件照底色)
OpenCV-实现背景分离(可用于更改证件照底色)
365 1
|
前端开发
妙用滤镜构建高级感拉满的磨砂玻璃渐变背景
妙用滤镜构建高级感拉满的磨砂玻璃渐变背景
227 0
妙用滤镜构建高级感拉满的磨砂玻璃渐变背景
|
Python 容器
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
266 0
|
iOS开发
iOS开发-改变图片的颜色
iOS开发-改变图片的颜色
422 0
|
C++
duilib corner属性的贴图技巧——让图片自动贴到控件的的某一边或者一角并自适应控件的大小
转载请说明原出处,谢谢~~          Duilib给控件贴图功能可以附带多个属性,各个属性的配合可以达到许多效果。以下是duilib支持的所有贴图属性: 贴图描述:          Duilib的表现力丰富很大程度上得益于贴图描述的简单强大。
1800 0
简简单单修改游戏对象的材质颜色,一起来看看(Unity3D)
前段时间比较忙,好久没更新博客了,感觉技术都下降了,还是要坚持输出呀。 孔子曰:&quot;学而不思则罔,思而不学则殆&quot;,不能光学习,还要学会思考,要能用起来。 将自己学到的东西记录下来,这样会让学习更加有效。