ofPath::getOutline() and ofPolyline::getBoundingBox() でofRectが返って来ない問題 #openFrameworks

capture

ofPath::getBoundingBox();

ofxSvgの各パスをgetBoundingBox()でゲットしようとしたのが、値が返って来ない問題がありました。この問題の解決策としては、アウトラインを取るのに線の太さが設定し、またofPathのWindingModeも適したものを選択しておく必要があります。

サンプルコード


ofPath path; //パスを追加してください。
path.setStrokeWidth(1.0); //太さがないとアウトラインは取れない
path.setPolyWindingMode(OF_POLY_WINDING_ODD); //適した
auto polyLine = path.getOutline()[0]; //とりあえず0番目のアウトライン
auto rect = polyLine.getBoudingBox();

参考

Get ofPath bounding box

ofImage画像をofPath描画でマスクする #openFrameworks

ofImageへのマスク処理

alpha

0.9.0~ できるようになったというofImageへのマスク処理 setAlphaMask (参考:画像を形を指定してマスクする)を試してみました。

サンプルコード


ofPath path;
ofImage img;
ofFbo fbo;

void ofApp::setup(){

ofHideCursor();

//set path
for(auto i = 0 ; i < 100 ; i++){
ofSetColor(255);
const auto pos = ofPoint(ofRandom(float(ofGetWidth())),float(ofRandom(ofGetHeight())));
path.lineTo(pos);
}

//set fbo
fbo.allocate(ofGetWidth(),ofGetHeight(),GL_RGBA /*GL_LUMINANCE*/);
fbo.begin();
path.draw();
fbo.end();

//set img
//dataフォルダに好きな画像を入れてください。
if(!img.load("mirrorboy.jpg")){
ofLog() << "image is not loaded." ;
};

img.setAnchorPercent(0.5,0.5);
img.getTexture().setAlphaMask(fbo.getTexture());
}

void ofApp::draw(){

 ofBackgroundGradient(ofColor::yellow,ofColor::gray);

 ofSetColor(255);
 img.draw(ofGetWidth()/2,ofGetHeight()/2);

}