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(); }
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"; }
//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!")); }
//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); }
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()); }
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"); }
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; }