cocos2dx 3.x(屏幕截圖的兩種方法)

【RenderTexture】this

    RenderTexture這個動態紋理類,顧名思義就是能夠動態建立紋理圖片。orm

    屏幕截圖主要步驟:blog

        > 開始截圖:render->begin();圖片

        > 遍歷場景:scene->visit();get

        > 結束截圖:render->end();string

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

    其中Image::Format爲圖片格式,能夠保存爲PNG、或JPG兩種格式。io

    即:Image::Format::PNGImage::Format::JPGfunction

 

 

第一種截圖方法:form

一、截圖方法

 

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

  

二、保存路徑

    > Win32  :保存在 Debug.win32/ 目錄下。

    > Android:保存在 /data/data/com.summer.hello/files/ScreenShot.png 。

 

=================================================================

 

第二種截圖方法;

【utils::captureScreen】

    在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)
//

  


二、截圖方法

//
//屏幕截圖
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.");
    }
}
//

  

三、保存路徑

    filename能夠只是一個文件名(保存到相對路徑):像這樣 "ScreenShot.png"

    filename也能夠是一個絕對路徑                :像這樣 "/sdcard/ScreenShot.png"

相關文章
相關標籤/搜索