Example #1
0
void CalibrationMain::OpenFile(QString fileName)
{
    QList<QString > tmp;
    QString imgFileM;
    QFileInfo ourFile(fileName);
    currentFile = fileName;

    LastOpenDir = ourFile.absoluteDir().path();

    tmp = ourFile.fileName().split(".", QString::SkipEmptyParts);
    if(tmp.size()==2)
        imgFileM = tmp[0] + "m." + tmp[1];
    else
        imgFileM = "";
    //mask = ;

    QImage maskImg;

    if(QFile::exists(ourFile.absoluteDir().path() + "/" + imgFileM))
        maskImg = Graphics::loadQImage( ourFile.absoluteDir().path() + "/" + imgFileM );
    else
        maskImg = QImage();

    x_imageSprite = QPixmap::fromImage(
                Graphics::setAlphaMask(
                    Graphics::loadQImage( fileName )
                    , maskImg )
                );

    loadConfig(fileName);

    initScene();
    updateControls();
    updateScene();
}
Example #2
0
void CalibrationMain::saveConfig(QString fileName, bool customPath)
{
    createDirs();
    QFileInfo ourFile(fileName);
    QString ini_sprite;
    ini_sprite = ourFile.absoluteDir().path()+"/"+ourFile.baseName() + ".ini";

    if(customPath)
    {
        ini_sprite = QFileDialog::getSaveFileName(this, "Save calibration settings", ini_sprite, "*.ini");
        if(ini_sprite.isEmpty()) return;
    }

    //ini_sprite = ApplicationPath + "/calibrator/spriteconf/" + ourFile.baseName() + ".ini";
    QSettings conf(ini_sprite, QSettings::IniFormat);
    int x, y;

    conf.clear();

    conf.beginGroup("common");
        conf.setValue("width", frameWidth);
        conf.setValue("height", frameHeight);
        conf.setValue("height-duck", frameHeightDuck);
        conf.setValue("grab-offset-x", frameGrabOffsetX);
        conf.setValue("grab-offset-y", frameGrabOffsetY);
        conf.setValue("over-top-grab", frameOverTopGrab);
    conf.endGroup();

    for(x=0; x<10;x++)
    {
        for(y=0; y<10;y++)
        {
            if(framesX[x][y].used)
            {
                conf.beginGroup("frame-"+QString::number(x)+"-"+QString::number(y));
            // Don't save width and height parameters!
                //conf.setValue("height", (framesX[i][j].isDuck?frameHeightDuck:frameHeight));
                //conf.setValue("width", frameWidth);
                conf.setValue("offsetX", framesX[x][y].offsetX);
                conf.setValue("offsetY", framesX[x][y].offsetY);
                conf.setValue("used", framesX[x][y].used);
                if(framesX[x][y].isDuck) conf.setValue("duck", framesX[x][y].isDuck);
                if(framesX[x][y].isRightDir) conf.setValue("isRightDir", framesX[x][y].isRightDir);
                if(framesX[x][y].showGrabItem) conf.setValue("showGrabItem", framesX[x][y].showGrabItem);
                conf.endGroup();
            }
        }
    }

    setSpriteAniData(conf);

    QMessageBox::information(this, "Saved", "Configuration saved in file\n"+ini_sprite);
}
SpriteScene::SpriteScene(QObject *parent) : QGraphicsScene(parent)
{
    QGraphicsItem * dragon;
    QGraphicsItem * Frame;
    QGraphicsItem * Square;
    QList<QString > tmp;
    QFileInfo ourFile(currentFile);
    QString imgFileM;
    QPixmap sprite, mask;
    croc = new QGraphicsPixmapItem;
    sizer = new QGraphicsRectItem;

    mCurrentFrameX = 0;
    mCurrentFrameY = 0;

    x=0; y=0, dir=1;
    mPos = QPoint(0,0);

    sprite = QPixmap(currentFile);

    tmp = ourFile.fileName().split(".", QString::SkipEmptyParts);
    if(tmp.size()==2)
        imgFileM = tmp[0] + "m." + tmp[1];
    else
        imgFileM = "";
    mask = QPixmap( ourFile.absoluteDir().path() + "/" + imgFileM );

    sprite.setMask(mask);
    mSpriteImage = QPixmap(sprite);

    draw();

    Frame = addRect(0,0,100,100, QPen(Qt::gray, 1), Qt::transparent);
    Frame->setZValue(-10);

    croc->setPixmap(QPixmap(currentImage));
    dragon = addPixmap(QPixmap(currentImage));
    croc->setParentItem(dragon);
    dragon->setZValue(0);

    Square = addRect(0,0,0,0, QPen(Qt::NoPen), Qt::transparent);
    sizer->setRect(0,0,100,100);
    sizer->setPen(QPen(Qt::green));
    sizer->setParentItem(Square);
    sizer->setZValue(3);

    //qDebug() << "Scene created";
}
Example #4
0
//Made templates for test calibration
void CalibrationMain::on_MakeTemplateB_clicked()
{
    QImage output(1000, 1000, QImage::Format_ARGB32);
    output.fill(Qt::transparent);

    QPainter pa(&output);
    pa.setPen(QPen(Qt::gray, 1));
    for(int i=1; i<10;i++)
    {
        pa.drawLine(0, 100*i, 1000, 100*i );
        pa.drawLine(100*i, 0, 100*i, 1000 );
    }
    pa.setPen(QPen(Qt::yellow, 1));
    pa.setBrush(Qt::transparent);

    for(int i=0; i<10; i++)
        for(int j=0; j<10; j++)
        {
            if(framesX[i][j].used)
            {
                pa.drawRect(framesX[i][j].offsetX + 100*i, framesX[i][j].offsetY + 100 * j,
                            frameWidth-1, (framesX[i][j].isDuck?frameHeightDuck:frameHeight)-1);
            }
        }
    pa.end();

    QFileInfo ourFile(currentFile);
    QString targetFilePng =  ourFile.absoluteDir().absolutePath() + "/" + ourFile.baseName()+"_hitboxes.png";
    targetFilePng = QFileDialog::getSaveFileName(this, tr("Save hitbox map as image"), targetFilePng, "PNG Image (*.png)");
    if(targetFilePng.isEmpty()) return;
//    QString targetFileGif1    =  AppPathManager::userAppDir() + "/calibrator/templates/" + ourFile.baseName() + ".gif";
//    QString targetFileGifMask =  AppPathManager::userAppDir() + "/calibrator/templates/" + ourFile.baseName() + "m.gif";

    QApplication::setOverrideCursor(Qt::WaitCursor);

//    QImage targetGif = output;
//    QImage mask = targetGif.alphaChannel();
//    mask.invertPixels();
    QPixmap::fromImage(output).save(targetFilePng, "png");
//    Graphics::toGif(targetGif, targetFileGif1);
//    Graphics::toGif(mask, targetFileGifMask);

    QApplication::restoreOverrideCursor();

    QMessageBox::information(this, tr("Saved"), tr("Hitbox map has been saved!"));

}
Example #5
0
//Made templates for test calibration
void CalibrationMain::on_MakeTemplateB_clicked()
{
    QGraphicsScene * temp1 = new QGraphicsScene;
    QGraphicsScene * temp2 = new QGraphicsScene;
    QFileInfo ourFile(currentFile);
    QString targetFile =  QApplication::applicationDirPath() + "/calibrator/templates/" + ourFile.baseName() + ".gif";
    QString targetFile2 =  QApplication::applicationDirPath() + "/calibrator/templates/" + ourFile.baseName() + "m.gif";

    temp1->setBackgroundBrush(QBrush(Qt::black));
    temp2->setBackgroundBrush(QBrush(Qt::white));

    for(int i=0; i<10; i++)
        for(int j=0; j<10; j++)
        {
            if(framesX[i][j].used)
            {
                temp1->addRect(framesX[i][j].offsetX + 100*i, framesX[i][j].offsetY + 100 * j,
                              framesX[i][j].W-1, framesX[i][j].H-1, QPen(Qt::yellow, 1),Qt::transparent);
                temp2->addRect(framesX[i][j].offsetX + 100*i, framesX[i][j].offsetY + 100 * j,
                              framesX[i][j].W-1, framesX[i][j].H-1, QPen(Qt::black, 1),Qt::transparent);
            }
        }

    QImage img1(1000,1000,QImage::Format_ARGB32_Premultiplied);
    QImage img2(1000,1000,QImage::Format_ARGB32_Premultiplied);
    QPainter p1(&img1);
    QPainter p2(&img2);
    temp1->render(&p1, QRectF(0,0,1000,1000),QRectF(0,0,1000,1000));
    temp2->render(&p2, QRectF(0,0,1000,1000),QRectF(0,0,1000,1000));
    p1.end();
    p2.end();

    QApplication::setOverrideCursor(Qt::WaitCursor);
    Graphics::toGif(img1, targetFile);
    Graphics::toGif(img2, targetFile2);
    //img1.save(targetFile);
    //img2.save(targetFile2);
    QApplication::restoreOverrideCursor();

    QMessageBox::information(this, tr("Saved"), tr("Sprite drawing templates saved in:\n")
                             +targetFile+"\n"+targetFile2);

}
Example #6
0
void CalibrationMain::OpenFile(QString fileName)
{
    QList<QString > tmp;
    QString imgFileM;
    QFileInfo ourFile(fileName);
    currentFile = fileName;

    LastOpenDir = ourFile.absoluteDir().path();

    int x, y;
    x = ui->FrameX->value();
    y = ui->FrameY->value();

    tmp = ourFile.fileName().split(".", QString::SkipEmptyParts);
    if(tmp.size()==2)
        imgFileM = tmp[0] + "m." + tmp[1];
    else
        imgFileM = "";
    //mask = ;

    //Scene->mSpriteImage = QPixmap(fileName);
    Scene->mSpriteImage = QPixmap::fromImage(
                    Graphics::setAlphaMask(
                        Graphics::loadQImage( fileName )
                        ,Graphics::loadQImage( ourFile.absoluteDir().path() + "/" + imgFileM ))
                    );
    //Scene->mSpriteImage.setMask(mask);

    loadConfig(fileName);

    Scene->draw();

    ui->Height->setValue(framesX[x][y].H);
    ui->Width->setValue(framesX[x][y].W);
    ui->OffsetX->setValue(framesX[x][y].offsetX);
    ui->OffsetY->setValue(framesX[x][y].offsetY);
    ui->EnableFrame->setChecked(framesX[x][y].used);

    Scene->setFrame(ui->FrameX->value(), ui->FrameY->value());
    Scene->setSquare(ui->OffsetX->value(), ui->OffsetY->value(), ui->Height->value(), ui->Width->value());
}
Example #7
0
void CalibrationMain::loadConfig(QString fileName)
{
    createDirs();
    currentConfig = fileName;
    QFileInfo ourFile(fileName);
    QString ini_sprite;
    //Load Customized
    if(QFileInfo(ourFile.absoluteDir().path()+"/"+ourFile.baseName() + ".ini").exists())
        //Load Customized
        ini_sprite = ourFile.absoluteDir().path()+"/"+ourFile.baseName() + ".ini";
    else
        //Load Default
        ini_sprite = ApplicationPath + "/calibrator/spriteconf/" + ourFile.baseName() + ".ini";
    QSettings conf(ini_sprite, QSettings::IniFormat);

    conf.beginGroup("common");
        frameWidth = conf.value("width", "-1").toInt();
        frameHeight = conf.value("height", "-1").toInt();
        frameHeightDuck = conf.value("height-duck", "-1").toInt();
        frameGrabOffsetX = conf.value("grab-offset-x", "0").toInt();
        frameGrabOffsetY = conf.value("grab-offset-y", "0").toInt();
        frameOverTopGrab = conf.value("over-top-grab", "false").toBool();
    conf.endGroup();
    int i, j;

    for(i=0; i<10;i++)
    {
        for(j=0; j<10;j++)
        {
            conf.beginGroup("frame-"+QString::number(i)+"-"+QString::number(j));
            framesX[i][j].H = conf.value("height", "100").toInt();
            framesX[i][j].W = conf.value("width", "100").toInt();
            framesX[i][j].offsetX = conf.value("offsetX", "0").toInt();
            framesX[i][j].offsetY = conf.value("offsetY", "0").toInt();
            framesX[i][j].used = conf.value("used", "false").toBool();
            framesX[i][j].isDuck = conf.value("duck", "false").toBool();
            framesX[i][j].isRightDir = conf.value("isRightDir", "false").toBool();
            framesX[i][j].showGrabItem = conf.value("showGrabItem", "false").toBool();
            conf.endGroup();

            if(frameWidth < 0)
            {
                if(framesX[i][j].used)
                    frameWidth=framesX[i][j].W;
            }
            if(frameHeight < 0)
            {
                if(framesX[i][j].used)
                    frameHeight=framesX[i][j].H;
            }
            if(frameHeightDuck < 0)
            {
                if(framesX[i][j].used)
                    frameHeightDuck=framesX[i][j].H;
            }
        }
    }

    AniFrames.set.clear();
    //get Animation frameSets
    getSpriteAniData(conf, "Idle");
    getSpriteAniData(conf, "Run");
    getSpriteAniData(conf, "JumpFloat");
    getSpriteAniData(conf, "JumpFall");
    getSpriteAniData(conf, "SpinJump");
    getSpriteAniData(conf, "Sliding");
    getSpriteAniData(conf, "Climbing");
    getSpriteAniData(conf, "Fire");
    getSpriteAniData(conf, "SitDown");
    getSpriteAniData(conf, "Dig");
    getSpriteAniData(conf, "GrabIdle");
    getSpriteAniData(conf, "GrabRun");
    getSpriteAniData(conf, "GrabJump");
    getSpriteAniData(conf, "GrabSitDown");
    getSpriteAniData(conf, "RacoonRun");
    getSpriteAniData(conf, "RacoonFloat");
    getSpriteAniData(conf, "RacoonFly");
    getSpriteAniData(conf, "RacoonFlyDown");
    getSpriteAniData(conf, "RacoonTail");
    getSpriteAniData(conf, "Swim");
    getSpriteAniData(conf, "SwimUp");
    getSpriteAniData(conf, "OnYoshi");
    getSpriteAniData(conf, "OnYoshiSit");
    getSpriteAniData(conf, "PipeUpDown");
    getSpriteAniData(conf, "PipeUpDownRear");
    getSpriteAniData(conf, "SlopeSlide");
    getSpriteAniData(conf, "TanookiStatue");
    getSpriteAniData(conf, "SwordAttak");
    getSpriteAniData(conf, "JumpSwordUp");
    getSpriteAniData(conf, "JumpSwordDown");
    getSpriteAniData(conf, "DownSwordAttak");
    getSpriteAniData(conf, "Hurted");

}
Example #8
0
bool ImageCalibrator::init(QString imgPath)
{
    QList<QString > tmp;
    QString imgFileM;
    QString imgOrig;
    QFileInfo ourFile(imgPath);
    tmp = ourFile.fileName().split(".", QString::SkipEmptyParts);
    if(tmp.size()==2)
        imgFileM = tmp[0] + "m." + tmp[1];
    else
        imgFileM = "";
    //mask = ;

    imgOrig = ourFile.absoluteDir().path() + "/" + tmp[0] + "_orig.png";

    bool createOrig=false;
    if(!QFile::exists(imgOrig))
    {
        createOrig=true;
    }

    //Scene->mSpriteImage = QPixmap(fileName);
    if(createOrig)
    {
        sprite = QPixmap::fromImage(
                    Graphics::setAlphaMask(
                        Graphics::loadQImage( imgPath )
                        ,Graphics::loadQImage( ourFile.absoluteDir().path() + "/" + imgFileM ))
                    );
        if(sprite.isNull()) return false;
        sprite.save(imgOrig, "PNG");
         // Generate backup image
    }
    else
        sprite = QPixmap::fromImage(
                            Graphics::loadQImage( imgOrig )
                    ); // load original sprite instead current


    if(sprite.isNull()) return false;

    targetPath = imgPath;

    pngPath = ourFile.absoluteDir().path() + "/" + tmp[0] + ".png";
    gifPath = ourFile.absoluteDir().path() + "/" + tmp[0] + ".gif";
    gifPathM = ourFile.absoluteDir().path() + "/" + tmp[0] + "m.gif";
    iniPath =  ourFile.absoluteDir().path() + "/" + tmp[0] + "_orig_calibrates.ini";

    //generate scene
    ui->PreviewGraph->setScene(new QGraphicsScene(ui->PreviewGraph));
    QGraphicsScene * sc = ui->PreviewGraph->scene();

    frmX=0;
    frmY=0;

    frameOpts xyCell;
    xyCell.offsetX=0;
    xyCell.offsetY=0;
    xyCell.W=0;
    xyCell.H=0;
    xyCell.used=false;
    xyCell.isDuck=false;
    xyCell.isRightDir=false;
    xyCell.showGrabItem=false;
    // Write default values
    QVector<frameOpts > xRow;
    for(int i=0; i<10; i++)
    {
        xRow.clear();
        for(int j=0; j<10; j++)
        {
            xRow.push_back(xyCell);
        }
        imgOffsets.push_back(xRow);
    }


    loadCalibrates();

    imgFrame = sc->addPixmap(sprite.copy(frmX*100,frmY*100,100,100));
    imgFrame->setZValue(0);
    imgFrame->setPos(0,0);

    phsFrame = sc->addRect(0,0,99,99, QPen(QBrush(Qt::gray), 1));
    phsFrame->setZValue(-2);
    phsFrame->setOpacity(0.5f);
    phsFrame->setPos(0,0);

    physics = sc->addRect(0,0,99,99, QPen(QBrush(Qt::green), 1));
    physics->setZValue(4);
    physics->setPos(0,0);

    updateScene();

    return true;
}