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);
直接看代码注释就懂了。贴上效果图,打完收工。

相关文章
|
数据采集 JSON 编解码
收藏|Unsplash高清壁纸批量下载(源码+工具)!
收藏|Unsplash高清壁纸批量下载(源码+工具)!
|
2月前
|
自然语言处理 监控 搜索推荐
如何通过电商 API 接口实现智能客服与用户互动?
随着电子商务的发展,企业对客户服务的需求激增。传统人工客服在高峰期难以应对大量咨询,导致效率低下和客户满意度下降。为此,越来越多的电商企业采用智能客服系统,通过电商API接口实现高效互动。本文探讨了如何利用电商API接口构建智能客服系统,介绍其技术组成、作用及实现策略,包括多渠道接入、优化交互界面、强化自然语言处理能力、个性化服务、提升自动化水平和监控分析等。同时,也讨论了面临的挑战与解决方案,强调统一API标准、加强数据安全和持续技术投入的重要性。最终,智能客服将为企业带来更高的服务效率和用户体验。
269 3
|
Java Maven Android开发
Android 阿里云镜像整理
Android 阿里云镜像整理
6098 0
|
Java 容器 Spring
聊聊Spring的bean覆盖(存在同名name/id问题),介绍Spring名称生成策略接口BeanNameGenerator【享学Spring】(中)
聊聊Spring的bean覆盖(存在同名name/id问题),介绍Spring名称生成策略接口BeanNameGenerator【享学Spring】(中)
|
8月前
|
数据采集 分布式计算 DataWorks
MaxCompute产品使用问题之如何确保数据完整性验证有效
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
120 2
|
7月前
|
Java Spring
深入理解Spring Boot中的Profile配置
深入理解Spring Boot中的Profile配置
|
3月前
|
API 开发者 UED
鸿蒙next版开发:ArkTS组件通用属性(形状裁剪)
在HarmonyOS 5.0中,ArkTS引入了形状裁剪的通用属性,支持矩形、圆形、椭圆及自定义路径等多种形状的裁剪和遮罩处理。本文详细解读了clip、clipShape、mask和maskShape属性,并提供了示例代码,帮助开发者实现多样化的界面设计和动画效果。
223 1
|
人工智能 固态存储 关系型数据库
阿里云国际短信价格(俄罗斯/印尼/意大利/伊朗等)
阿里云国际短信价格(俄罗斯/印尼/意大利/伊朗等),阿里云国际短信费用价格表,印度短信0.216元一条、中国香港短信0.33元一条、美国短信0.053元一条、日本短信0.514元一条、俄罗斯短信1.02元一条、印尼短信1.01元一条、意大利短信0.565元一条、伊朗短信0.592元一条,阿里云国际短信支持东南亚、欧洲、非洲、美洲等国家和地区
547 0
|
9月前
|
Java 数据安全/隐私保护
开源一个基于SpringBoot的慈善公益平台(二)
开源一个基于SpringBoot的慈善公益平台
148 0
|
XML Java Maven
Maven 生成可运行的jar的多种方式
Maven 生成可运行的jar的多种方式
210 0
Maven 生成可运行的jar的多种方式

热门文章

最新文章