分享屏幕截图ScreenShot方法总结

2015年03月23日 16:27 0 点赞 0 评论 更新于 2025-11-21 18:19

本文将详细比较 Cocos2d - x 2.x 版本与 3.x 版本中屏幕截图的两种方式。

一、RenderTexture 方法

1. RenderTexture 简介

RenderTexture 是一个动态纹理类,其主要功能是可以动态创建纹理图片。

2. 屏幕截图主要步骤

  • 开始截图:调用 render->begin() 方法,开启截图操作。
  • 遍历场景:使用 scene->visit() 方法,遍历场景中的所有元素。
  • 结束截图:执行 render->end() 方法,结束截图操作。
  • 保存截图:调用 render->saveToFile(string& filename, Image::Format format) 方法,将截图保存到指定文件。其中 Image::Format 为图片格式,支持保存为 PNG 或 JPG 两种格式,分别对应 Image::Format::PNGImage::Format::JPG

3. 截图方法示例

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 格式
}

4. 保存路径

  • Win32:截图文件保存在 Debug.win32/ 目录下。
  • Android:截图文件保存在 /data/data/com.summer.hello/files/ScreenShot.png

二、utils::captureScreen 方法

1. 方法定义

在 Cocos2d - x v3.2 版本中,新增了 utils::captureScreen() 方法用于保存屏幕截图。该方法的定义如下:

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

2. 截图方法示例

// 屏幕截图
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());
// 显示截图
Size winSize = CCDirector::sharedDirector()->getWinSize();
Sprite* sp = Sprite::create(outputFile);
sp->setPosition(winSize / 2);
this->addChild(sp);
sp->setScale(0.25); // 放缩
}
else
{
CCLOG("Capture screen failed.");
}
}

3. 保存路径

filename 参数可以只是一个文件名,此时截图将保存到相对路径;也可以是一个绝对路径,如 /sdcard/ScreenShot.png

综上所述,Cocos2d - x 2.x 版本常用 RenderTexture 进行屏幕截图,而 3.2 及以上版本可以使用 utils::captureScreen() 方法,开发者可以根据具体需求选择合适的截图方式。

作者信息

menghao

menghao

共发布了 3994 篇文章