我的环境是cocos2dx 2.x的版本

【CCRenderTexture】

CCRenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片。

屏幕截图主要步骤:

开始截图:render->begin();

遍历场景:scene->visit();

结束截图:render->end();

保存截图:render->saveToFile(string& filename, Image::Format format);

其中Image::Format为图片格式,可以保存为PNG、或JPG两种格式。

即:Image::Format::PNGImage::Format::JPG

首先是截整个屏幕(CCDirector.cpp中):

saveToDCIM函数,找个目录,然后找到一个没用过的名字开始saveScreenShot

 void CCDirector::saveToDCIM()
{
char bufferName[]; for (int i = ;i<;i++)
{
std:string filedir = "";
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
filedir = std::string(SDKInterface::getExternalStoragePath()) +"/Screenshots";
#else
filedir = CCFileUtils::sharedFileUtils()->getWritablePath() +"/Screenshots";
#endif
memset(bufferName,,sizeof(bufferName));
sprintf(bufferName,"/SCREENSHOT_%d.png",i);
std::string filename = filedir + std::string(bufferName);
if(!CCFileUtils::sharedFileUtils()->isFileExist(filename))
{
CCLog("ScreenShoot");
createDirectory(filedir.c_str());
saveScreenshot(filename);
return;
}
}
}

这是实际干活的函数:

 void CCDirector::saveScreenshot( const std::string& fileName)
{
CCScene* temp = CCDirector::sharedDirector()->getRunningScene();
if (temp)
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCRenderTexture* rt = CCRenderTexture::create(winSize.width, winSize.height);
rt->begin();
temp->visit();
rt->end();
rt->saveToFile(fileName.c_str());
CCLog(fileName.c_str());
}
}

然后是截取屏幕的某一个部分,cocos2dx 3.x的版本里可以直接用这个函数:

2.x版本的怎么办呢?用得到的全屏截图rt的一部分RECT创建Sprite,然后在visit该Sprite,获得第二张截图rt2(比较懒,肯定不是最好的方法,欢迎指点)

 void CCDirector::renderTexturePartImpl(int x, int y, int width, int height, const std::string& fileName)
{
CCScene* temp = CCDirector::sharedDirector()->getRunningScene();
if (temp)
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCRenderTexture* rt = CCRenderTexture::create(winSize.width, winSize.height);
rt->beginWithClear(,,,,);
temp->visit();
rt->endToLua(); CCRenderTexture* rt2 = CCRenderTexture::create(width, height);
CCSprite* spr = CCSprite::createWithTexture(rt->getSprite()->getTexture(), CCRect(x, y, width, height));
spr->setAnchorPoint(CCPoint(,));
spr->setPosition(CCPoint(,));
spr->setFlipY(true);
rt2->beginWithClear(,,,,);
spr->visit();
rt2->endToLua();
rt2->saveToFile(fileName.c_str());
CCLog(fileName.c_str());
}
}

cocos2dx截整屏、截部分屏的更多相关文章

  1. 通过js实现整屏滑动+全屏翻页+动画展示+线性图

    技术:html+css+jquery+jquery-ui.js+jquery.fullPage.js   概述 本demo主要通过html+css+js实现整屏滑动,全屏翻页并带动画的功能效果,借助于 ...

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

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

  3. cocos2dx之保存截屏图片

    http://blog.csdn.net/ganpengjin1/article/details/19088921 我们要保存当前的运行的scene的截图的话,我用到CCRenderTexture,看 ...

  4. cocos2dx for lua 截屏功能

    cocos2dx的utils类中包含截图功能,使用方法如下: cc.utils:captureScreen(function(successed,outputFile)--第一个参数是截图成功或者失败 ...

  5. [cocos2d-x·解Bug]关于cocos2d-x游戏在android锁屏状态下播放Bgm的解决方法

    最近<宠物联萌>在三星App上发布遇到一个问题:如果用户在锁定屏幕时解锁解到一半时取消解锁,这时用cocos2d-x开发的游戏就会出现游戏Bgm会恢复播放,但手机屏幕仍然是锁屏状态的Bug ...

  6. Cocos2d-x在Android在竖屏切换

    在Cocos2d-x在,屏幕类型的默认设置是横屏,当我们需要切换到肖像,能够在项目目录打开proj.android目录.找到AndroidManifest.xml文件,直接打开,然后就可以看到里面:s ...

  7. cocos2d-x ios 设置横屏/竖屏(全)

    Cocos2d-x项目\iOS\RootViewController.mm文件中. 以下方法任选其一即可…      本人机子函数二ok! 函数一: (BOOL)shouldAutorotateToI ...

  8. cocos2d-x for wp8 设置横竖屏

    在主project文件(xxx.cpp , xxx为你的项目名)中, 函数名为void xxx::SetWindow(CoreWindow^ window) 相关代码片例如以下: <pre na ...

  9. asp.net调用客户端WebBrowser 进行网站地址截屏

    在asp.net网站中,如果要实现,在文本框中输入一个URL地址,就把该网页的页面整屏截下来,这段时间一直在研究这一块,在网上查了好多资料.自己又整合了一下. 其实也不是想象中的那么难.主要是通过调用 ...

随机推荐

  1. 模块之dir函数

    dir()函数你可以使用内建的dir函数来列出模块定义的标识符.标识符有函数.类和变量.当你为dir()提供一个模块名的时候,它返回模块定义的名称列表.如果不提供参数,它返回当前模块中定义的名称列表. ...

  2. 数据分析与R语言-概念点(一)

    一.数据分析 1.数据分析的多层模型 常用的统计量 常用的算法 常用的数据分析工具 常见的报表 二.R语言 1.什么是R语言?     R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个 ...

  3. FZU 2091 播放器

    简单模拟题,开个栈维护一下即可. #include<cstdio> #include<cstring> #include<cmath> #include<st ...

  4. bzoj4008: [HNOI2015]亚瑟王【期望dp】

    一个特别神奇的dp,特别厉害. f(i, j) 表示 有 j 轮发动技能的牌在 [1, i] 另外的m - j轮在[i + 1, n]之间的概率. 怎么转移呢? 首先考虑i这张牌不选的情况,f(i - ...

  5. JRPC 轻量级RPC框架

    JRPC是一个轻量级的java RPC框架.它支持服务注册和发现. 目前它开源了,地址为:https://github.com/dinstone/jrpc. Quick Start step 1: g ...

  6. StackExchange.Redis 官方文档(一) Basics

    基本使用方法: StackExchange.Redis的核心是 StackExchange.Redis 命名空间的 ConnectionMultiplexer 类;它隐藏了多服务器的实现细节.Conn ...

  7. struts2拦截器-自定义拦截器,放行某些方法(web.xml配置)

    一.web.xml配置 <filter> <filter-name>encodingFilter</filter-name> <filter-class> ...

  8. windows下Nodejs环境部署

    前言 Nodejs是基于v8引擎的轻量级框架,其特点为事件驱动.非阻塞.单线程.异步回调等. Nodejs相对于其他运行在服务器端的语言,容易学习,使用方便. 本文将介绍windows下Nodejs的 ...

  9. Mysql死锁问题解决方式 & 聚簇索引、隔离级别等知识

    参考了这篇文章:http://www.cnblogs.com/LBSer/p/5183300.html  <mysql死锁问题分析> 写的不错. 如果Mysql死锁,会报出: 1.1 死锁 ...

  10. 【T】并行调度

    /** * 并行调度相关处理 * * 按卫星*日期 ,将待处理的任务分解为 卫星+日期 粒度的子任务 添加到paramMapList列表中 */ List<Map<String, Obje ...