Example #1
0
QString RotoCanvas::getLayersFolderPath(QFileInfo frameFI, int frameNumber, bool createEnable)
{
    //such as <sequenceName>/frames/<frameNumber>/layers
    QString seqName=RotoCanvas::getSeqName(frameFI);
    //qInfo() << "seqName:" << seqName; //see also qInfo,qDebug,qWarning,qCritical,qFatal
    QString seqPath=frameFI.dir().filePath(seqName);
    QDir seqDir(seqPath);
    if (createEnable) {
        if (!seqDir.exists()) frameFI.dir().mkdir(seqName);
    }
    QString framesPath=seqDir.filePath("frames");
    //qInfo()<<"framesPath:"<<framesPath;
    QDir framesDir(framesPath);
    if (createEnable) {
        if (!framesDir.exists()) seqDir.mkdir("frames");
    }
    QString thisFramePath=framesDir.filePath(QString::number(frameNumber));
    //qInfo()<<"thisFramePath:"<<thisFramePath;
    QDir thisFrameDir=QDir(thisFramePath);
    if (createEnable) {
        if (!thisFrameDir.exists()) framesDir.mkdir(QString::number(frameNumber));
    }
    QString layersPath=QDir(thisFramePath).filePath("layers");
    //qInfo()<<"layersPath:"<<layersPath;
    QDir layersDir=QDir(layersPath);
    if (createEnable) {
        if (!layersDir.exists()) thisFrameDir.mkdir("layers");
    }
    return layersPath;
}
void BodyBase::setup(string seqDirPath)
{
    // - crop to roi
    // - chroma keying
    // - save it as tex vector
    
    float chromaThresh = 0.0;
    ofColor keyColor;
    ofxXmlSettings settings;
    settings.load(seqDirPath + "/settings.xml");
    settings.pushTag("roi");
    roi.set(settings.getValue("x", 0), settings.getValue("y", 0),
            settings.getValue("w", 1920), settings.getValue("h", 1080));
    settings.popTag();
    settings.pushTag("chroma");
    chromaThresh = settings.getValue("thresh", 0.0);
    keyColor.set(settings.getValue("r", 0), settings.getValue("g", 0), settings.getValue("b", 0));
    settings.popTag();
    settings.pushTag("anchor");
    anchor.x = settings.getValue("x", 0);
    anchor.y = settings.getValue("y", 0);
    settings.popTag();
    settings.clear();
    
    seqTweak.load("shaders/common/simpleVert.vert", "shaders/scene/seqTweak.frag");
    
    ofDirectory seqDir(seqDirPath);
    seqDir.listDir();
    for (int i = 0; i < seqDir.size(); i++)
    {
        ofFile f = seqDir.getFile(i);
        if (isImgFile(f.getExtension()))
        {
            ofFbo fbo;
            seq.push_back(fbo);
            ofTexture tex;
            ofLoadImage(tex, f.getAbsolutePath());
            seq.back().allocate(roi.getWidth(), roi.getHeight());
            seq.back().begin();
            ofClear(0);
            Globals::chromaKey.begin();
            Globals::chromaKey.setUniform3f("chromaKeyColor", ofVec3f(keyColor.r/255.0, keyColor.g/255.0, keyColor.b/255.0));
            Globals::chromaKey.setUniform1f("threshold", chromaThresh);
            tex.drawSubsection(0, 0, roi.getWidth(), roi.getHeight(), roi.x, roi.y);
            Globals::chromaKey.end();
            seq.back().end();
//            seq.back().setAnchorPoint(anchor.x, anchor.y);
            tex.clear();
        }
    }
    seqDir.close();
    
    tweaker.allocate(roi.getWidth(), roi.getHeight());
}