zoukankan      html  css  js  c++  java
  • cocos2dx 3.x(屏幕截图的两种方法)

    【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、截图方法

     

     
    //
    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"

  • 相关阅读:
    Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的
    spring-in-action_day01
    spring-in-action_day02
    spring-in-action-day04-配置属性 @ConfigurationProperties
    springmvc接收参数
    spring中Utils工具类注入问题
    Eclipse Push出现rejected
    Eclpis-cannot open git-receive-pack
    IO
    LinkedHashmap简要说明
  • 原文地址:https://www.cnblogs.com/luorende/p/6063951.html
Copyright © 2011-2022 走看看