(1)使用RenderTexture:这是在2.x版本时最常用的的截图方法。
(2)使用utils::captureScreen() :在3.2版本中新增的截图方法。
RenderTexture
RenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片。
屏幕截图主要步骤:
-
开始截图:render->begin();
-
遍历场景:scene->visit();
-
结束截图:render->end();
-
保存截图:render->saveToFile(string& filename, Image::Format format);
其中Image::Format为图片格式,可以保存为PNG、或JPG两种格式。即:Image::Format::PNG、Image::Format::JPG。
1、截图方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
void HelloWorld::capture(Ref* { CCLOG( "ScreenShot" ); //获取屏幕尺寸大小 Size //创建RenderTexture,纹理图片大小为窗口大小winSize RenderTexture* //屏幕截图 screen->begin(); //开始抓屏 this ->getParent()->visit(); //遍历当前场景Scene的所有子节点信息,画入screen中 screen->end(); //结束抓屏 //保存截图 screen->saveToFile( "ScreenShot.png" , //保存为PNG格式 //screen->saveToFile("ScreenShot.jpg", } |
2、保存路径
Win32:保存在 Debug.win32/ 目录下。
Android:保存在 /data/data/com.summer.hello/files/ScreenShot.png 。
utils::captureScreen
在v3.2版本,utils::captureScreen()方法被加入用于保存屏幕截图。
1、定义
1
2
3
4
5
6
7
|
// // // // // // void captureScreen( const std::function<</code> |
2、截图方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//屏幕截图 void HelloWorld::capture(Ref* { CCLOG( "ScreenShot" ); utils::captureScreen(CC_CALLBACK_2(HelloWorld::afterCapture, this ), "ScreenShot.png" ); } //截图后执行afterCapture void HelloWorld::afterCapture( bool succeed, const std::string& { if (succeed) { CCLOG( "%s" , //显示截图 Sprite* sp->setPosition(winSize this ->addChild(sp); sp->setScale(0.25); //放缩 } else { CCLOG( "Capture ); } } |
3、保存路径
filename可以只是一个文件名(保存到相对路径):像这样 "ScreenShot.png"。
filename也可以是一个绝对路径:像这样 "/sdcard/ScreenShot.png"。