差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
openframeworks:fbo_frame_of_buffer [2019/06/26 19:36] – [描画している任意の部分を画像に保存したい] baba | openframeworks:fbo_frame_of_buffer [2019/06/26 19:42] (現在) – baba | ||
---|---|---|---|
行 9: | 行 9: | ||
===== 描画している任意の部分を画像に保存したい ===== | ===== 描画している任意の部分を画像に保存したい ===== | ||
例えば画面上にある画像を表示し、その上に任意の文字列を表示したサンプルがあるとします。画像自体はofImageで読み込みしているので、保存することは簡単にできますが、その上に描画されている任意テキストも一緒に、となるとちょっと難しくなります。例えばofに ofSaveScreen()なる関数が用意されているので、これを使えば画面にスクリーンショットを保存できますし、mac標準のスクリーンショット機能を使えば同様のことは可能です。一方で任意の場所に関して保存したい場合はfboが役に立ちます。以下のサンプルは画面上に sample.jpg を表示し、その上に "Hello ofFbo" | 例えば画面上にある画像を表示し、その上に任意の文字列を表示したサンプルがあるとします。画像自体はofImageで読み込みしているので、保存することは簡単にできますが、その上に描画されている任意テキストも一緒に、となるとちょっと難しくなります。例えばofに ofSaveScreen()なる関数が用意されているので、これを使えば画面にスクリーンショットを保存できますし、mac標準のスクリーンショット機能を使えば同様のことは可能です。一方で任意の場所に関して保存したい場合はfboが役に立ちます。以下のサンプルは画面上に sample.jpg を表示し、その上に "Hello ofFbo" | ||
- | * sample.jpg: | + | * {{ : |
+ | 適当なプロジェクトを作成して、下記のofApp.h, | ||
<WRAP group> | <WRAP group> | ||
<WRAP half column> | <WRAP half column> | ||
行 34: | 行 35: | ||
#include " | #include " | ||
- | // | ||
void ofApp:: | void ofApp:: | ||
+ | // sample.jpg を読み込む dataフォルダにおいておくことを忘れずに | ||
img.load(ofToDataPath(" | img.load(ofToDataPath(" | ||
+ | | ||
+ | // 読み込んだ画像サイズ分のfboサイズをメモリ確保する | ||
fbo.allocate(img.getWidth(), | fbo.allocate(img.getWidth(), | ||
} | } | ||
- | // | ||
void ofApp:: | void ofApp:: | ||
+ | // fbo.begin()からfbo.end()の間に記述された描画内容がfboに保存される | ||
fbo.begin(); | fbo.begin(); | ||
ofClear(0); | ofClear(0); | ||
行 48: | 行 51: | ||
fbo.end(); | fbo.end(); | ||
} | } | ||
- | |||
- | // | ||
void ofApp:: | void ofApp:: | ||
ofBackground(0); | ofBackground(0); | ||
+ | |||
+ | // 0, | ||
+ | // update()内で描画した内容が表示される。 | ||
fbo.draw(0, | fbo.draw(0, | ||
} | } | ||
- | |||
- | // | ||
void ofApp:: | void ofApp:: | ||
if( key == ' | if( key == ' | ||
ofPixels p; | ofPixels p; | ||
fbo.readToPixels(p); | fbo.readToPixels(p); | ||
+ | | ||
+ | // saved_image.jpgというjpgファイルを最高品質で補zんする | ||
ofSaveImage(p, | ofSaveImage(p, | ||
+ | | ||
+ | // データフォルダをfinderで開く(terminalで open ./data を実行している) | ||
ofSystem(" | ofSystem(" | ||
} | } | ||
行 68: | 行 74: | ||
</ | </ | ||
+ | |||
+ | 以上を実行し、キーボードの ' | ||