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