cocos2dx截整屏、截部分屏
我的环境是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
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截整屏、截部分屏相关推荐
- cocos2d-x 3.2 截屏
cocos2d-x 3.2 版本添加了截屏功能,方法位于 ccUtils.h 文件中 void captureScreen(const std::function<void(bool, cons ...
- android华为怎么截屏快捷键,华为手机怎么截图?华为手机截图怎么截?截屏快捷键是什么?...
感动的瞬间有很多,或许是与亲朋好友视频时的搞怪表情,或许是与爱人在微信的一句表白,又或者是公布比赛结果的那一瞬间.一瞬间的感动,一瞬间的开心,一瞬间的惊喜,不管这一瞬间发生了什么,它们都是很容易消逝的 ...
- cocos2d-x返回Android游戏黑屏解决办法
返回Android游戏黑屏解决办法 这几天逛cocos2d-x.org论坛,发现cocos2d-x的作者放出来一个帖子,用来解决返回Android游戏加载资源时黑屏的问题.帖子过些日子估计就沉了,所以 ...
- cocos2d-x游戏开发屏幕横竖屏切换
android解决方案: 1.在游戏的主activity中编写一个静态方法(继承Cocos2dxActivity) public static void changedActivityOrientat ...
- cocos2d-x for wp8 设置横竖屏
在主project文件(xxx.cpp , xxx为你的项目名)中, 函数名为void xxx::SetWindow(CoreWindow^ window) 相关代码片例如以下: <pre na ...
- 如何使用cocos2dx 制作一个多向滚屏坦克类射击游戏-第二部分
原文链接:http://www.raywenderlich.com/6888/how-to-make-a-multi-directional-scrolling-shooter-part-2 这里使用 ...
- cocos2d-x 之 适配分辨率全屏的方法
原文出处:http://dualface.github.io/blog/2012/08/17/cocos2d-x-2-dot-0-multi-resolution/ cocos2d-x 2.0 提供一 ...
- qt 截图 视频 截屏幕 截窗口
近期在做一个项目,用directshow将换面渲染到qt窗口上,希望能通过截图方式将画面渲染出来,网上中文的查了很多,绝大部分调用widget中的grab() 或者调用QPixmap中的grabwi ...
- ios截屏功能html,滚动截屏APP - iPhone上的长截图工具
话说长截图功能也算是一种刚需了,如今安卓好多手机系统都会自带此功能.很难想象的是,安卓手机标配的「长截图」功能,对果粉来说是多么的奢侈.iPhone没有自带的长截图功能,只能借助第三方APP,比如Ta ...
- 005.Python制作客户端截屏通过合宙ESP32-C3投屏到0.96OLED
Python制作客户端截屏通过ESP32-C3投屏到0.96'OLED 一.实现原理 Python对屏幕进行截屏,并进行数据处理 Python与ESP32-C3通过WIFI建立tcp连接 Python ...
最新文章
- leetcode 438. Find All Anagrams in a String 滑动窗口法
- 顶级Java多线程面试题及回答
- 函数集成redis与Spring集成
- steam怎么看邮箱绑定的账号_lol手游appleid怎么绑定拳头账号 英雄联盟手游账号绑定方法_英雄联盟手游...
- .Oracle管理及常用基础脚本
- android—获取网络数据
- java 常量池详解
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
- python定位元素在列表中的位置_python定位列表元素
- 基于消息队列 RocketMQ 的大型分布式应用上云实践
- 检查linux的crontab服务,crontab任务调度健康检测
- C文件 写入 读取 函数
- linux下apache tomcat jk集群,apache+tomcat+JK 集群 并发上不去
- java configuration类_使用@Configuration编写自定义配置类
- SpringCloud之服务提供者和服务消费者
- ArcGIS面矢量挖洞
- GPU加速(一)CUDA C编程及GPU基本知识
- vulnhub——Bulldog2
- PS188——谱瑞(Parade)推动的 Type-C扩展坞红海战略
- 06_2_Pytorch的基础数据类型、CPU tensor类型和GPU tensor类型、判断数据类型、CPU或GPU张量之间的转换、数据类型转换、1-4维向量、Tensor张量、Variable等
热门文章
- nemesis什么车_TSC名车品牌将推全新Nemesis全球最强超跑
- python图像边缘检测_python 简单图像处理(11) 空间域图像锐化(边缘检测)
- classcastexception异常_Java程序员必备:异常的十个关键知识点
- fisco bcos PerformanceDT.java 源码解析阅读注释
- 2021最新基于uniapp的计算机考研助手小程序(含管理端)
- java过滤集合,java – 如何通过交集过滤集合集合?
- MySQL四种事务隔离级的说明
- 一次慢查询暴露的隐蔽的问题
- 2.11.PHP7.1 狐教程-【PHP 数组】
- 后台java规范参数_详解Java后端优雅验证参数合法性