我们今天就简单说下 cocos2d的Texture的简单用法,并将一张大图裁剪成小图并保存起来

我们先准备一张大图,如下:

只看图,表太在意内容啊。

我们的目的就是将这张大图裁剪成一张张的小图并保存下来。

首先,我们要将它裁剪成一张张的小图,小图的大小自己计算哈,我就不告诉你w=Width/5,h=(Height-108)/8的;

然后,将裁剪出来的小图一张张的绘制出来;

最后,将绘制的每一张保存起来。

我怎么这么多话啊,说了这么多,一行代码也写呢,好了,直接上代码:

auto size = Director::getInstance()->getVisibleSize();
const char * pSaveImageFromar = "image_%d_%d_%d.png";
int row = 7;
int col = 4;
int w = 137;
int h = 137;
for (int k = 0; k < 6; k++)
{
  auto texturecache = Director::getInstance()->getTextureCache()->addImage(String::createWithFormat("%d.jpg", k)->getCString());
  for (int i = 0; i <= row; i++)
  {
    for (int j = 0; j <= col; j++)
    {
      auto sp = Sprite::createWithTexture(texturecache, Rect(0 + j + j*w, 108 + i*h + i, w, h));        //裁剪出来的精灵
      sp->setPosition(sp->getContentSize().width / 2, sp->getContentSize().height / 2);
      const char* pName = String::createWithFormat(pSaveImageFromar, k, i, j)->getCString();
      RenderTexture* rrt = RenderTexture::create(w, h); //创建一个对象,用来绘制裁剪出来的精灵,起点是左下角,向右w,向上h,绘制出来的大小   
      rrt->setPosition(size.width / 2, size.height / 2);           //默认绘制出来的默认是放在左下角的 为了方便看到就移到中心了
      rrt->begin();             //在这里开始捕捉
      sp->visit();               //捕捉的对象
      rrt->end();               //捕捉结束
      rrt->saveToFile(pName, Image::Format::PNG);         //将捕捉到的对象保存起来
    }
  }
}

这样我们就将裁剪的图片保存下来了,保存路径我们可以进到saveToFile中查看

其中有一行FileUtils::getInstance()->getWritablePath(),我们打印下输出路径就知道保存到哪了。

最终我们就获得了一张张的小图:

酱紫以后就不愁聊天木有表情了吧,将这些都到添加到QQ表情中就OK啦。

当然如果这张大图是用TexturePacker打包的,我们还可以通过Anti_TexturePacker一键将其裁剪。

因此,通过这个我们也很容易举一反三的实现拍照截屏的功能了。

好了,不早了,明天还得码砖。

2016年9月19日 0:58 于苏州。

Texture的渲染及截屏功能的更多相关文章

  1. android4.3 截屏功能的尝试与失败分析

    1.背景 上一篇讲了在源码中捕获到了android手机的截屏函数(同时按下电源键与音量减,详情http://blog.csdn.net/buptgshengod/article/details/199 ...

  2. 【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成

    3.0的截屏和2.x的截屏基本上同样.都是利用RenderTexture来处理,在渲染之前调用call函数,然后调用Cocos的场景visit函数对其进行渲染,渲染结束后调用end函数就可以.仅仅是3 ...

  3. PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)

    PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...

  4. Atitit截屏功能的设计解决方案

    Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,,  复制 ...

  5. iOS截屏功能

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...

  6. 使用laravel框架与phantomjs实现截屏功能

    在网上看到的关于phantomjs实现截屏功能很多都是与node结合在一起使用,并需要输入命令才能执行.因此我想要实现输入网址即可截屏并输出图片的功能.示例:http://120.77.171.182 ...

  7. Android自己定义截屏功能,相似QQ截屏

    由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .and ...

  8. [置顶] Android 应用内禁止截屏功能的实现

    截图介绍   Android的调试工具DDMS提供有截屏功能,很多软件也会有截屏功能,在做支付等安全类应用的时候,为了保证用户的资产和系统安全,往往会禁止应用内截屏,禁止之后,在此应用处于前台的情况下 ...

  9. 小胖说事22-----iOS开发技巧之取消键盘响应和截屏功能

    1.UILable内容模糊 在非Retina的iPad mini 的屏幕上,一个UILable的frame的origin值假设是有小数位(如0.5),就会造成显示模糊,所以不妨用整数值的origin. ...

随机推荐

  1. dcmtk常用命令

    dump2dcm 把普通文件转换成含有dcm头的文件,参数为源文件,目标文件 例:dump2dcm q1.txt query.dcm 表示把q1.txt文件转换为query.dcm dcmdump 阅 ...

  2. 2014.3.4-C语言学习小结

    位操作: 知识点: 1.位运算符 2.位移运算符 1.将指定位设置为12.将指定位设置为03.获取指定位的内容 ==========================复习二进制 1.二进制转换 10-- ...

  3. KMP算法详解-- 转自Matrix67

       6 7 8 9 --    A = a b a b  6 7  7 8 9 --    A = a b a b a  5 6 7  8 9 --    A = a b a b a b  6 7 ...

  4. iOS基础 - 类扩展

    一.类扩展(class extension,匿名分类) 1.格式 @interface 类名 () { // 成员变量... } // 方法声明... @end 2.作用 1> 写在.m文件中 ...

  5. nhibernate+autofac+mvc的demo

    想自己做一个小的demo.目的是能够提供一个系统架构,在这个基础上,可以快速开发一些小型的系统.

  6. 对类sizeof的时候

    sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么? #include<stdio.h> #include<string.h& ...

  7. CKEditor4.x部署和配置

    CKEditor4.x && JSP 官网下载CKEditor,可选Basic, Standard, Full 解压放置其WebRoot下 JSP中引入以下文件: <script ...

  8. Java线程同步之一--AQS

    Java线程同步之一--AQS 线程同步是指两个并发执行的线程在同一时间不同时执行某一部分的程序.同步问题在生活中也很常见,就比如在麦当劳点餐,假设只有一个服务员能够提供点餐服务.每个服务员在同一时刻 ...

  9. 对象转Json序列化

    C#--对象转Json序列化 前言 最近在研究Android项目,其中涉及到Android中解析Json数据的问题,需要模拟网络中传递Json数据的模式,因为以前是.net的工程师,所以想着从.net ...

  10. Java-抽象类定义构造方法

    abstract class A {  public static final String INFO="hello world";  public String name=&qu ...