Add image export for metatileset
This commit is contained in:
parent
c27ea49fcd
commit
b0e12170fb
5 changed files with 69 additions and 20 deletions
|
@ -562,6 +562,8 @@
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionExport_Primary_Tiles_Image"/>
|
<addaction name="actionExport_Primary_Tiles_Image"/>
|
||||||
<addaction name="actionExport_Secondary_Tiles_Image"/>
|
<addaction name="actionExport_Secondary_Tiles_Image"/>
|
||||||
|
<addaction name="actionExport_Primary_Metatiles_Image"/>
|
||||||
|
<addaction name="actionExport_Secondary_Metatiles_Image"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menuEdit">
|
<widget class="QMenu" name="menuEdit">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
|
@ -666,6 +668,16 @@
|
||||||
<string>Import Secondary Metatiles from Advance Map 1.92...</string>
|
<string>Import Secondary Metatiles from Advance Map 1.92...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionExport_Primary_Metatiles_Image">
|
||||||
|
<property name="text">
|
||||||
|
<string>Export Primary Metatiles Image...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionExport_Secondary_Metatiles_Image">
|
||||||
|
<property name="text">
|
||||||
|
<string>Export Secondary Metatiles Image...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
<action name="actionCut">
|
<action name="actionCut">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Cut</string>
|
<string>Cut</string>
|
||||||
|
|
|
@ -96,11 +96,11 @@ private slots:
|
||||||
void on_comboBox_terrainType_activated(int arg1);
|
void on_comboBox_terrainType_activated(int arg1);
|
||||||
|
|
||||||
void on_actionExport_Primary_Tiles_Image_triggered();
|
void on_actionExport_Primary_Tiles_Image_triggered();
|
||||||
|
|
||||||
void on_actionExport_Secondary_Tiles_Image_triggered();
|
void on_actionExport_Secondary_Tiles_Image_triggered();
|
||||||
|
void on_actionExport_Primary_Metatiles_Image_triggered();
|
||||||
|
void on_actionExport_Secondary_Metatiles_Image_triggered();
|
||||||
|
|
||||||
void on_actionImport_Primary_Metatiles_triggered();
|
void on_actionImport_Primary_Metatiles_triggered();
|
||||||
|
|
||||||
void on_actionImport_Secondary_Metatiles_triggered();
|
void on_actionImport_Secondary_Metatiles_triggered();
|
||||||
|
|
||||||
void on_copyButton_metatileLabel_clicked();
|
void on_copyButton_metatileLabel_clicked();
|
||||||
|
|
|
@ -16,6 +16,8 @@ public:
|
||||||
uint16_t getSelectedMetatileId();
|
uint16_t getSelectedMetatileId();
|
||||||
void updateSelectedMetatile();
|
void updateSelectedMetatile();
|
||||||
QPoint getMetatileIdCoordsOnWidget(uint16_t metatileId);
|
QPoint getMetatileIdCoordsOnWidget(uint16_t metatileId);
|
||||||
|
QImage buildPrimaryMetatilesImage();
|
||||||
|
QImage buildSecondaryMetatilesImage();
|
||||||
|
|
||||||
QVector<uint16_t> usedMetatiles;
|
QVector<uint16_t> usedMetatiles;
|
||||||
bool selectorShowUnused = false;
|
bool selectorShowUnused = false;
|
||||||
|
@ -40,6 +42,8 @@ private:
|
||||||
void drawFilters();
|
void drawFilters();
|
||||||
void drawUnused();
|
void drawUnused();
|
||||||
void drawCounts();
|
void drawCounts();
|
||||||
|
QImage buildAllMetatilesImage();
|
||||||
|
QImage buildImage(int metatileIdStart, int metatileIdEnd);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void hoveredMetatileChanged(uint16_t);
|
void hoveredMetatileChanged(uint16_t);
|
||||||
|
|
|
@ -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()
|
void TilesetEditor::on_actionImport_Primary_Metatiles_triggered()
|
||||||
{
|
{
|
||||||
this->importTilesetMetatiles(this->primaryTileset, true);
|
this->importTilesetMetatiles(this->primaryTileset, true);
|
||||||
|
|
|
@ -12,27 +12,32 @@ TilesetEditorMetatileSelector::TilesetEditorMetatileSelector(Tileset *primaryTil
|
||||||
this->usedMetatiles.resize(Project::getNumMetatilesTotal());
|
this->usedMetatiles.resize(Project::getNumMetatilesTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TilesetEditorMetatileSelector::draw() {
|
QImage TilesetEditorMetatileSelector::buildAllMetatilesImage() {
|
||||||
if (!this->primaryTileset || !this->secondaryTileset) {
|
return this->buildImage(0, Project::getNumMetatilesPrimary() + this->secondaryTileset->metatiles.length() - 1);
|
||||||
this->setPixmap(QPixmap());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int primaryLength = this->primaryTileset->metatiles.length();
|
QImage TilesetEditorMetatileSelector::buildPrimaryMetatilesImage() {
|
||||||
int length_ = primaryLength + this->secondaryTileset->metatiles.length();
|
return this->buildImage(0, this->primaryTileset->metatiles.length() - 1);
|
||||||
int height_ = length_ / this->numMetatilesWide;
|
}
|
||||||
if (length_ % this->numMetatilesWide != 0) {
|
|
||||||
height_++;
|
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);
|
image.fill(Qt::magenta);
|
||||||
QPainter painter(&image);
|
QPainter painter(&image);
|
||||||
for (int i = 0; i < length_; i++) {
|
for (int i = 0; i < totalMetatiles; i++) {
|
||||||
int tile = i;
|
|
||||||
if (i >= primaryLength) {
|
|
||||||
tile += Project::getNumMetatilesPrimary() - primaryLength;
|
|
||||||
}
|
|
||||||
QImage metatile_image = getMetatileImage(
|
QImage metatile_image = getMetatileImage(
|
||||||
tile,
|
i + metatileIdStart,
|
||||||
this->primaryTileset,
|
this->primaryTileset,
|
||||||
this->secondaryTileset,
|
this->secondaryTileset,
|
||||||
map->metatileLayerOrder,
|
map->metatileLayerOrder,
|
||||||
|
@ -44,9 +49,15 @@ void TilesetEditorMetatileSelector::draw() {
|
||||||
QPoint metatile_origin = QPoint(map_x * 32, map_y * 32);
|
QPoint metatile_origin = QPoint(map_x * 32, map_y * 32);
|
||||||
painter.drawImage(metatile_origin, metatile_image);
|
painter.drawImage(metatile_origin, metatile_image);
|
||||||
}
|
}
|
||||||
|
|
||||||
painter.end();
|
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();
|
this->drawSelection();
|
||||||
|
|
||||||
drawFilters();
|
drawFilters();
|
||||||
|
|
Loading…
Reference in a new issue