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

【CCRenderTexture】

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

屏幕截图主要步骤:

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

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

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

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

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

即:Image::Format::PNG、Image::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. Identifying Dialogue Act Type

    Natural Language Processing with Python Chapter  6.2 import nltk from nltk.corpus import nps_chat as ...

  2. list集合怎么转化成一个javaBean对象,及常见的使用方法(全)

    一.List集合的用法 1.list集合添加实体并输出 for (int i = 0; i < list.size(); i++) { javabean obj= (javabean)list. ...

  3. ubuntu升级php版本

    如果安装的 PHP 版本过低的话,可以通过下面的指令来升级: sudo add-apt-repository ppa:ondrej/php5   sudo apt-get update   sudo  ...

  4. 只要单片机具有真正唯一ID,就可以让加密坚不可摧(转)

    源:只要单片机具有真正唯一ID,就可以让加密坚不可摧 http://www.amobbs.com/thread-5518980-1-1.html 第一环:ID-->F1(ID) -----> ...

  5. IOS 实现TXT文本自动识别编码的方法

    from :http://kyoworkios.blog.51cto.com/878347/1344013 TXT识别编码是个复杂的问题.幸好有c/c++的一个库能识别. 库的叫uchardet,可以 ...

  6. iOS开发网络篇之文件下载、大文件下载、断点下载

    from: http://www.jianshu.com/p/f65e32012f07

  7. bzoj1562[NOI2009]变换序列——2016——3——12

    任意门:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题目: 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定 ...

  8. 一分钟完成MySQL5.7安装部署

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1855415 Part ...

  9. UILable添加事件

    原文:http://blog.sina.com.cn/s/blog_9e8867eb0101dk6t.html 先需要声明的是:UILabel或UIImageView的 userInteraction ...

  10. C# Winform窗口之间传值的多种方法浅析(转)

    摘要http://www.jb51.net/article/63837.htm 这篇文章主要介绍了C# Winform窗口之间传值的多种方法浅析,本文起讲解了通过构造器传值.通过属性传递.通过事件携带 ...