cocos2dx[3.2](18)——屏幕截圖ScreenShot
屏幕截圖有兩種方式:
(1)使用RenderTexture :這是在2.x版本時最常用的的截圖方法。
(2)使用utils::captureScreen() :在3.2版本中新增的截圖方法。
補匆
since cocos2dx 3.x i think you should call the render() method first then call newImage() in order to get the image safely:
Director::getInstance()->getRenderer()->render();
auto img = rt->newImage();// now you can get your image without any problems!
//don't forget to release image memory
CC_SAFE_DELETE_ARRAY(img);
【致謝】
【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
20
21
|
void HelloWorld::capture(Ref* sender)
{
CCLOG( "ScreenShot" );
Size winSize = CCDirector::sharedDirector()->getWinSize();
RenderTexture* screen = RenderTexture::create(winSize.width, winSize.height);
screen->begin();
this ->getParent()->visit();
screen->end();
screen->saveToFile( "ScreenShot.png" , Image::Format::PNG);
}
|
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
8
9
|
void captureScreen( const std::function< void ( bool , const 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
25
26
|
void HelloWorld::capture(Ref* sender)
{
CCLOG( "ScreenShot" );
utils::captureScreen(CC_CALLBACK_2(HelloWorld::afterCapture, this ), "ScreenShot.png" );
}
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"。