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::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 }
时间: 2024-12-15 06:54:10

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

cocos2d-x for wp8 设置横竖屏

在主工程文件(xxx.cpp , xxx为你的项目名)中, 函数名为void xxx::SetWindow(CoreWindow^ window) 相关代码片如下: <pre name="code" class="cpp">void ImpasseForLife::SetWindow(CoreWindow^ window) { // Specify the orientation of your application here // The choic

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

返回Android游戏黑屏解决办法这几天逛cocos2d-x.org论坛,发现cocos2d-x的作者放出来一个帖子,用来解决返回Android游戏加载资源时黑屏的问题.帖子过些日子估计就沉了,所以转出来,以供后面查询.需要修改三个文件:1) cocos2dx/platform/CCPlatformMacros.h 将Line84修改为 #define CC_ENABLE_CACHE_TEXTURE_DATA       0 2)cocos2dx/platform/android/java/sr

【COCOS2D-X 备注篇】cocos2dx 获取手机截屏等意外取消触屏事件的处理方法!

最近有童鞋问我如何获取到iphone手机截屏的事件,所以本篇就简单的聊下这种问题的处理办法. 在cocos2dx引擎中,我们能在AppDelegate中获取到,用户将应用切入后台,以及重新返回应用的事件函数.那么对应的,cocos2dx也在引擎中给予我们截取屏幕等这种只能手机应有事件的处理函数. 其实大家应该都很熟悉截取用户触屏的函数,如下: 1 2 3 4 // default implements are used to call script callback if exist virtu

cocos2dx for lua 截屏功能

cocos2dx的utils类中包含截图功能,使用方法如下: cc.utils:captureScreen(function(successed,outputFile)--第一个参数是截图成功或者失败的回调函数 if successed then--如果成功,返回true,否则返回nil local sp = cc.Sprite:create(outputFile) end end,"captureTexture.png")第二个参数是保存文件名 看cocos源代码,截图文件会将保存在

cocos2dx之保存截屏图片

http://blog.csdn.net/ganpengjin1/article/details/19088921 我们要保存当前的运行的scene的截图的话,我用到CCRenderTexture,看例子代码: [cpp] view plaincopy CCSize size = CCDirector::sharedDirector()->getWinSize(); CCRenderTexture *screen = CCRenderTexture::create(size.width, siz

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

android解决方案: 1.在游戏的主activity中编写一个静态方法(继承Cocos2dxActivity) public static void changedActivityOrientation(int orientation){ switch(orientation) { case 1://横屏 instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case 2://竖

Cocos2d-x在Android在竖屏切换

在Cocos2d-x在,屏幕类型的默认设置是横屏,当我们需要切换到肖像,能够在项目目录打开proj.android目录.找到AndroidManifest.xml文件,直接打开,然后就可以看到里面:screenOrientation="landscape",这表示将屏幕设置成了横屏:将它改成:screenOrientation="portrait",此,屏幕变成竖屏切换. 版权声明:本文博客原创文章,博客,未经同意,不得转载.

各手机截屏方法收集

很多时候需要把手机截屏保存下来,现收集各种方法以供使用. 一.把手机连接电脑,用豌豆荚.91助手.360手机助手等手机助手软件进行截图,这种方式的好处是,可以给手机的外型也“截个图”. 二.针对各手机自带的截屏功能如下: 1.三星手机截屏 1)同时按住手机中间的home键+电源键,等手机咔嚓一声,整个屏幕就会被截取下来.注意一定是同时按住,否则很有可能截取不下来. 2)在图册中有个screenshots相册用来存放截屏下来的图片 2.酷派手机截屏 1)安卓版本4.0以上 在手机上同时按住开机键和

c# GDI+ bitmap截屏不清晰的问题

问题是截一个区域的屏,考到我的画图界面中,就模糊了.bitmap应该是保真的,无损才对.网上搜了很多文章,有用的不多,一个有用的概念是bitmap.setResolution()方法只对打印有用,是个提示,对于屏幕显示模糊的问题没有用.另一个是Graphics的 Gdi.SmoothingMode = SmoothingMode.HighQuality; Gdi.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.Hi