我的环境是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

 1 void CCDirector::saveToDCIM()
 2 {
 3     char bufferName[256];
 4
 5     for (int i = 0;i<999999;i++)
 6     {
 7         std:string filedir = "";
 8 #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
 9         filedir = std::string(SDKInterface::getExternalStoragePath())  +"/Screenshots";
10 #else
11         filedir = CCFileUtils::sharedFileUtils()->getWritablePath() +"/Screenshots";
12 #endif
13         memset(bufferName,0,sizeof(bufferName));
14         sprintf(bufferName,"/SCREENSHOT_%d.png",i);
15         std::string filename = filedir + std::string(bufferName);
16         if(!CCFileUtils::sharedFileUtils()->isFileExist(filename))
17         {
18             CCLog("ScreenShoot");
19             createDirectory(filedir.c_str());
20             saveScreenshot(filename);
21             return;
22         }
23     }
24 }

这是实际干活的函数:

 1 void CCDirector::saveScreenshot( const std::string& fileName)
 2 {
 3     CCScene* temp = CCDirector::sharedDirector()->getRunningScene();
 4     if (temp)
 5     {
 6         CCSize winSize = CCDirector::sharedDirector()->getWinSize();
 7         CCRenderTexture* rt = CCRenderTexture::create(winSize.width, winSize.height);
 8         rt->begin();
 9         temp->visit();
10         rt->end();
11         rt->saveToFile(fileName.c_str());
12         CCLog(fileName.c_str());
13     }
14 }

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

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

 1 void CCDirector::renderTexturePartImpl(int x, int y, int width, int height, const std::string& fileName)
 2 {
 3     CCScene* temp = CCDirector::sharedDirector()->getRunningScene();
 4     if (temp)
 5     {
 6         CCSize winSize = CCDirector::sharedDirector()->getWinSize();
 7         CCRenderTexture* rt = CCRenderTexture::create(winSize.width, winSize.height);
 8         rt->beginWithClear(0,0,0,0,0);
 9         temp->visit();
10         rt->endToLua();
11
12         CCRenderTexture* rt2 = CCRenderTexture::create(width, height);
13         CCSprite* spr = CCSprite::createWithTexture(rt->getSprite()->getTexture(), CCRect(x, y, width, height));
14         spr->setAnchorPoint(CCPoint(0,0));
15         spr->setPosition(CCPoint(0,0));
16         spr->setFlipY(true);
17         rt2->beginWithClear(0,0,0,0,0);
18         spr->visit();
19         rt2->endToLua();
20         rt2->saveToFile(fileName.c_str());
21         CCLog(fileName.c_str());
22     }
23 }

转载于:https://www.cnblogs.com/pandawuwyj/p/6387489.html

cocos2dx截整屏、截部分屏相关推荐

  1. cocos2d-x 3.2 截屏

    cocos2d-x 3.2 版本添加了截屏功能,方法位于 ccUtils.h 文件中 void captureScreen(const std::function<void(bool, cons ...

  2. android华为怎么截屏快捷键,华为手机怎么截图?华为手机截图怎么截?截屏快捷键是什么?...

    感动的瞬间有很多,或许是与亲朋好友视频时的搞怪表情,或许是与爱人在微信的一句表白,又或者是公布比赛结果的那一瞬间.一瞬间的感动,一瞬间的开心,一瞬间的惊喜,不管这一瞬间发生了什么,它们都是很容易消逝的 ...

  3. cocos2d-x返回Android游戏黑屏解决办法

    返回Android游戏黑屏解决办法 这几天逛cocos2d-x.org论坛,发现cocos2d-x的作者放出来一个帖子,用来解决返回Android游戏加载资源时黑屏的问题.帖子过些日子估计就沉了,所以 ...

  4. cocos2d-x游戏开发屏幕横竖屏切换

    android解决方案: 1.在游戏的主activity中编写一个静态方法(继承Cocos2dxActivity) public static void changedActivityOrientat ...

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

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

  6. 如何使用cocos2dx 制作一个多向滚屏坦克类射击游戏-第二部分

    原文链接:http://www.raywenderlich.com/6888/how-to-make-a-multi-directional-scrolling-shooter-part-2 这里使用 ...

  7. cocos2d-x 之 适配分辨率全屏的方法

    原文出处:http://dualface.github.io/blog/2012/08/17/cocos2d-x-2-dot-0-multi-resolution/ cocos2d-x 2.0 提供一 ...

  8. qt 截图 视频 截屏幕 截窗口

    近期在做一个项目,用directshow将换面渲染到qt窗口上,希望能通过截图方式将画面渲染出来,网上中文的查了很多,绝大部分调用widget中的grab()  或者调用QPixmap中的grabwi ...

  9. ios截屏功能html,滚动截屏APP - iPhone上的长截图工具

    话说长截图功能也算是一种刚需了,如今安卓好多手机系统都会自带此功能.很难想象的是,安卓手机标配的「长截图」功能,对果粉来说是多么的奢侈.iPhone没有自带的长截图功能,只能借助第三方APP,比如Ta ...

  10. 005.Python制作客户端截屏通过合宙ESP32-C3投屏到0.96OLED

    Python制作客户端截屏通过ESP32-C3投屏到0.96'OLED 一.实现原理 Python对屏幕进行截屏,并进行数据处理 Python与ESP32-C3通过WIFI建立tcp连接 Python ...

最新文章

  1. leetcode 438. Find All Anagrams in a String 滑动窗口法
  2. 顶级Java多线程面试题及回答
  3. 函数集成redis与Spring集成
  4. steam怎么看邮箱绑定的账号_lol手游appleid怎么绑定拳头账号 英雄联盟手游账号绑定方法_英雄联盟手游...
  5. .Oracle管理及常用基础脚本
  6. android—获取网络数据
  7. java 常量池详解
  8. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
  9. python定位元素在列表中的位置_python定位列表元素
  10. 基于消息队列 RocketMQ 的大型分布式应用上云实践
  11. 检查linux的crontab服务,crontab任务调度健康检测
  12. C文件 写入 读取 函数
  13. linux下apache tomcat jk集群,apache+tomcat+JK 集群 并发上不去
  14. java configuration类_使用@Configuration编写自定义配置类
  15. SpringCloud之服务提供者和服务消费者
  16. ArcGIS面矢量挖洞
  17. GPU加速(一)CUDA C编程及GPU基本知识
  18. vulnhub——Bulldog2
  19. PS188——谱瑞(Parade)推动的 Type-C扩展坞红海战略
  20. 06_2_Pytorch的基础数据类型、CPU tensor类型和GPU tensor类型、判断数据类型、CPU或GPU张量之间的转换、数据类型转换、1-4维向量、Tensor张量、Variable等

热门文章

  1. nemesis什么车_TSC名车品牌将推全新Nemesis全球最强超跑
  2. python图像边缘检测_python 简单图像处理(11) 空间域图像锐化(边缘检测)
  3. classcastexception异常_Java程序员必备:异常的十个关键知识点
  4. fisco bcos PerformanceDT.java 源码解析阅读注释
  5. 2021最新基于uniapp的计算机考研助手小程序(含管理端)
  6. java过滤集合,java – 如何通过交集过滤集合集合?
  7. MySQL四种事务隔离级的说明
  8. 一次慢查询暴露的隐蔽的问题
  9. 2.11.PHP7.1 狐教程-【PHP 数组】
  10. 后台java规范参数_详解Java后端优雅验证参数合法性