openframeworks:fbo_frame_of_buffer

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

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