加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx[3.2](18)――屏幕截图ScreenShot

发布时间:2020-12-14 19:00:26 所属栏目:百科 来源:网络整理
导读:【唠叨】 屏幕截图有两种方式: (1)使用 RenderTexture :这是在2.x版本时最常用的的截图方法。 (2)使用 utils::captureScreen() :在3.2版本中新增的截图方法。 【致谢】 http://www.jb51.cc/article/p-psfsykkj-bch.html http://cn.cocos2d-x.org/arti

【唠叨】

屏幕截图有两种方式:

(1)使用RenderTexture :这是在2.x版本时最常用的的截图方法。

(2)使用utils::captureScreen() :在3.2版本中新增的截图方法。


【致谢】

http://www.52php.cn/article/p-psfsykkj-bch.html

http://cn.cocos2d-x.org/article/index?type=wiki&url=/doc/cocos-docs-master/manual/framework/native/wiki/how-to-save-a-screenshot/zh.md




【RenderTexture】

RenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片。

屏幕截图主要步骤:

> 开始截图:render->begin();

> 遍历场景:scene->visit();

> 结束截图:render->end();

> 保存截图:render->saveToFile(string& filename,Image::Format format);

其中Image::Format为图片格式,可以保存为PNG、或JPG两种格式。

即:Image::Format::PNGImage::Format::JPG


1、截图方法

//
voidHelloWorld::capture(Ref*sender)
{
	CCLOG("ScreenShot");

	//获取屏幕尺寸大小
	SizewinSize=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、定义

//
	//>afterCaptured:该方法将在捕捉指令后被执行。
	//>bool:捕捉屏幕截图是否成功。
	//>string:截图存储的路径。
	//>filename:截图的名字。
	//>可以只是一个文件名。像这样ScreenShot.png。
	//>也可以是一个绝对路径。像这样/sdcard/ScreenShot.png。
	voidcaptureScreen(conststd::function<void(bool,conststd::string&)>&afterCaptured,conststd::string&filename)
//


2、截图方法

//
//屏幕截图
voidHelloWorld::capture(Ref*sender)
{
	CCLOG("ScreenShot");
	utils::captureScreen(CC_CALLBACK_2(HelloWorld::afterCapture,this),"ScreenShot.png");
}

//截图后执行afterCapture
voidHelloWorld::afterCapture(boolsucceed,conststd::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("Capturescreenfailed.");
	}
}
//


3、保存路径

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读