【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、截圖方法
//
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、定義
//
// > 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());
//顯示截圖
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"。
