比较Cocos2d-x 2.x版本与3.x版本屏幕截图的两种方式

(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* sender)
{
     CCLOG( "ScreenShot" );
  
     //获取屏幕尺寸大小
     Size winSize CCDirector::sharedDirector()->getWinSize();
  
     //创建RenderTexture,纹理图片大小为窗口大小winSize
     RenderTexture* screen RenderTexture::create(winSize.width, winSize.height);
  
     //屏幕截图
     screen->begin();             //开始抓屏
     this ->getParent()->visit();  //遍历当前场景Scene的所有子节点信息,画入screen中
     screen->end();               //结束抓屏
  
     //保存截图
     screen->saveToFile( "ScreenShot.png" Image::Format::PNG);  //保存为PNG格式
     //screen->saveToFile("ScreenShot.jpg", Image::Format::JPG); //保存为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
// afterCaptured:该方法将在捕捉指令后被执行。
// bool: 捕捉屏幕截图是否成功。
// string: 截图存储的路径。
// filename:截图的名字。
// 可以只是一个文件名。像这样ScreenShot.png。
// 也可以是一个绝对路径。像这样/sdcard/ScreenShot.png。
void  captureScreen( const  std::function<</code>void(boolconst std::string&)>& afterCaptured, const std::string& filename)

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* sender)
{
     CCLOG( "ScreenShot" );
     utils::captureScreen(CC_CALLBACK_2(HelloWorld::afterCapture,  this ),  "ScreenShot.png" );
}
  
//截图后执行afterCapture
void  HelloWorld::afterCapture( bool  succeed,  const  std::string& outputFile)
{
     if  (succeed)
     {
         CCLOG( "%s" outputFile.c_str());
         //显示截图
         Sprite* sp Sprite::create(outputFile);
         sp->setPosition(winSize 2);
         this ->addChild(sp);
         sp->setScale(0.25);  //放缩
     }
     else
     {
         CCLOG( "Capture screen failed." );
     }
}

3、保存路径

filename可以只是一个文件名(保存到相对路径):像这样 "ScreenShot.png"。

filename也可以是一个绝对路径:像这样 "/sdcard/ScreenShot.png"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值