我的环境是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. asp.net 输出Excel

    private void lbtExportToExcel_Click(object sender, EventArgs e) { string strdate = DateTime.Now.Mont ...

  2. Spring自学教程-注解的使用(三)

    一.java中的注解 定义注解 下面是一个定义注解的实例. @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documente ...

  3. 17、手把手教你Extjs5(十七)模块的新增、修改、删除操作

    上节在Grid展示时做了一个金额单位可以手工选择的功能,如果你要加入其他功能,也只要按照这个模式来操作就行了,比如说你想改变金额字段的颜色.小数位数.零值是否显示.货币符号.单位显示在标题栏或者跟在金 ...

  4. 4、手把手教你Extjs5(四)主界面上加入顶部和底部区域

    这一节为主界面加一个顶部区域和底部区域.一个管理系统的界面可以粗分为顶部标题部分.中间数据展示和处理的部分.底部备注和状态部分. 在增加这二个区域之前,我们先在MainModel.js中加入一些数据. ...

  5. linux ssl 双向认证

    一,首先切换到apache目录下,创建一个CA文件夹 sudo mkdir CA sudo chmod 777 CA 二,然后进去CA文件夹 cp CA 三,创建其它文件 mkdir demoCA m ...

  6. 自己实现一个IOC(控制翻转,DI依赖注入)容器

    1.新建一个控制台应用程序 TestIOC 2.新增一个 IocFactory类 using System; using System.Collections.Generic; using Syste ...

  7. POST请求中参数以form data和request payload形式+清空数组方式

    测试与服务端ajax时用的dva封装的request方法,而后端怎么也拿不到参数.结果返现参数在request payload里. HTTP POST表单请求提交时:Content-Typeappli ...

  8. Spark中的键值对操作-scala

    1.PairRDD介绍     Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,Pa ...

  9. Angular - - Angular数据类型判断

    angular.isArray 判断括号内的值是否为数组. 格式:angular.isArray(value); value: 被判断是否为数组的值. ------------------------ ...

  10. 2.9. Scalar Properties for Primitive Data Types 选项(Core Data 应用程序实践指南)

    该选项的意思是,“用Scalar特性来表示原始数据类型”.什么意思,妈妈米呀,这是我学这门课程遇到的最难懂的概念. scalar properties,是复数,也就是说是 “分等级的属性”.那么,大概 ...