mirror of
https://github.com/huderlem/porymap.git
synced 2026-09-26 18:06:32 -05:00
Add image export for metatileset
This commit is contained in:
@@ -902,6 +902,28 @@ void TilesetEditor::on_actionExport_Secondary_Tiles_Image_triggered()
|
||||
}
|
||||
}
|
||||
|
||||
void TilesetEditor::on_actionExport_Primary_Metatiles_Image_triggered()
|
||||
{
|
||||
QString defaultName = QString("%1_Metatiles").arg(this->primaryTileset->name);
|
||||
QString defaultFilepath = QString("%1/%2.png").arg(this->project->root).arg(defaultName);
|
||||
QString filepath = QFileDialog::getSaveFileName(this, "Export Primary Metatiles Image", defaultFilepath, "Image Files (*.png)");
|
||||
if (!filepath.isEmpty()) {
|
||||
QImage image = this->metatileSelector->buildPrimaryMetatilesImage();
|
||||
image.save(filepath, "PNG");
|
||||
}
|
||||
}
|
||||
|
||||
void TilesetEditor::on_actionExport_Secondary_Metatiles_Image_triggered()
|
||||
{
|
||||
QString defaultName = QString("%1_Metatiles").arg(this->secondaryTileset->name);
|
||||
QString defaultFilepath = QString("%1/%2.png").arg(this->project->root).arg(defaultName);
|
||||
QString filepath = QFileDialog::getSaveFileName(this, "Export Secondary Metatiles Image", defaultFilepath, "Image Files (*.png)");
|
||||
if (!filepath.isEmpty()) {
|
||||
QImage image = this->metatileSelector->buildSecondaryMetatilesImage();
|
||||
image.save(filepath, "PNG");
|
||||
}
|
||||
}
|
||||
|
||||
void TilesetEditor::on_actionImport_Primary_Metatiles_triggered()
|
||||
{
|
||||
this->importTilesetMetatiles(this->primaryTileset, true);
|
||||
|
||||
@@ -12,27 +12,32 @@ TilesetEditorMetatileSelector::TilesetEditorMetatileSelector(Tileset *primaryTil
|
||||
this->usedMetatiles.resize(Project::getNumMetatilesTotal());
|
||||
}
|
||||
|
||||
void TilesetEditorMetatileSelector::draw() {
|
||||
if (!this->primaryTileset || !this->secondaryTileset) {
|
||||
this->setPixmap(QPixmap());
|
||||
}
|
||||
QImage TilesetEditorMetatileSelector::buildAllMetatilesImage() {
|
||||
return this->buildImage(0, Project::getNumMetatilesPrimary() + this->secondaryTileset->metatiles.length() - 1);
|
||||
}
|
||||
|
||||
int primaryLength = this->primaryTileset->metatiles.length();
|
||||
int length_ = primaryLength + this->secondaryTileset->metatiles.length();
|
||||
int height_ = length_ / this->numMetatilesWide;
|
||||
if (length_ % this->numMetatilesWide != 0) {
|
||||
height_++;
|
||||
QImage TilesetEditorMetatileSelector::buildPrimaryMetatilesImage() {
|
||||
return this->buildImage(0, this->primaryTileset->metatiles.length() - 1);
|
||||
}
|
||||
|
||||
QImage TilesetEditorMetatileSelector::buildSecondaryMetatilesImage() {
|
||||
int numPrimary = Project::getNumMetatilesPrimary();
|
||||
return this->buildImage(numPrimary, numPrimary + this->secondaryTileset->metatiles.length() - 1);
|
||||
}
|
||||
|
||||
QImage TilesetEditorMetatileSelector::buildImage(int metatileIdStart, int metatileIdEnd) {
|
||||
int totalMetatiles = metatileIdEnd - metatileIdStart + 1;
|
||||
int numMetatilesHigh = totalMetatiles / this->numMetatilesWide;
|
||||
if (totalMetatiles % this->numMetatilesWide != 0) {
|
||||
// Round up height for incomplete last row
|
||||
numMetatilesHigh++;
|
||||
}
|
||||
QImage image(this->numMetatilesWide * 32, height_ * 32, QImage::Format_RGBA8888);
|
||||
QImage image(this->numMetatilesWide * 32, numMetatilesHigh * 32, QImage::Format_RGBA8888);
|
||||
image.fill(Qt::magenta);
|
||||
QPainter painter(&image);
|
||||
for (int i = 0; i < length_; i++) {
|
||||
int tile = i;
|
||||
if (i >= primaryLength) {
|
||||
tile += Project::getNumMetatilesPrimary() - primaryLength;
|
||||
}
|
||||
for (int i = 0; i < totalMetatiles; i++) {
|
||||
QImage metatile_image = getMetatileImage(
|
||||
tile,
|
||||
i + metatileIdStart,
|
||||
this->primaryTileset,
|
||||
this->secondaryTileset,
|
||||
map->metatileLayerOrder,
|
||||
@@ -44,9 +49,15 @@ void TilesetEditorMetatileSelector::draw() {
|
||||
QPoint metatile_origin = QPoint(map_x * 32, map_y * 32);
|
||||
painter.drawImage(metatile_origin, metatile_image);
|
||||
}
|
||||
|
||||
painter.end();
|
||||
this->setPixmap(QPixmap::fromImage(image));
|
||||
return image;
|
||||
}
|
||||
|
||||
void TilesetEditorMetatileSelector::draw() {
|
||||
if (!this->primaryTileset || !this->secondaryTileset) {
|
||||
this->setPixmap(QPixmap());
|
||||
}
|
||||
this->setPixmap(QPixmap::fromImage(this->buildAllMetatilesImage()));
|
||||
this->drawSelection();
|
||||
|
||||
drawFilters();
|
||||
|
||||
Reference in New Issue
Block a user