oF:save image via fbo

はじめに

oFで画面保存と言えば、

ofSaveScreen("xxx.png");

である。
しかし、ofFbo上にAlpha Blendを有効にして描画を行い、同fboをofDisableAlphaBlending();で画面に描画した場合、最終画面は、Alpha Blendされていないので、これを保存した場合、Alpha効果がない(背景が抜けない、など)と言う問題が生じる。

そこで今回は、fboから直接image saveするための方法を調査した。

How to

openFrameworksにて、Fbo経由でスクリーンショットを保存する方法です。
一旦ofPixelsに変換したのちofImageに渡してから保存します。

void ofApp::keyPressed(int key){
    switch(key){
        case ' ':
            {
                ofImage img;
                ofPixels pixels;
                fbo.readToPixels(pixels);
                img.setFromPixels(pixels);
                char fileNameStr[BUF_SIZE_S];
                string date = ofGetTimestampString();//タイムスタンプをファイル名にする
                sprintf(fileNameStr, "%s.png", date.c_str());
                img.save(fileNameStr,OF_IMAGE_QUALITY_BEST);
                printf("> %s saved\n", fileNameStr);
            }
            break;
    }
}

参考URL

* openFrameworksでFboのスクリーンショットを保存する方法

もしよろしければ、サポートをお願いします! 頂いたサポートは、Creatorとしての活動費に充てさせて頂きます。