Support 8BPP tileset tile images

This commit is contained in:
GriffinR
2023-06-16 04:39:32 -07:00
parent 4ec5238abb
commit ff6a51ffa4
9 changed files with 41 additions and 26 deletions

View File

@@ -38,6 +38,8 @@ public:
QList<QList<QRgb>> palettes;
QList<QList<QRgb>> palettePreviews;
bool hasUnsavedTilesImage;
static Tileset* getMetatileTileset(int, Tileset*, Tileset*);
static Tileset* getTileTileset(int, Tileset*, Tileset*);
static Metatile* getMetatile(int, Tileset*, Tileset*);

View File

@@ -13,6 +13,7 @@ QImage getMetatileImage(Metatile*, Tileset*, Tileset*, QList<int>, QList<float>,
QImage getTileImage(uint16_t, Tileset*, Tileset*);
QImage getPalettedTileImage(uint16_t, Tileset*, Tileset*, int, bool useTruePalettes = false);
QImage getGreyscaleTileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset);
void flattenTo4bppImage(QImage * image);
static QList<QRgb> greyscalePalette({
qRgb(0, 0, 0),

View File

@@ -4,6 +4,7 @@
#include "selectablepixmapitem.h"
#include "paletteutil.h"
#include "imageproviders.h"
#include <memory>
using std::shared_ptr;
@@ -127,10 +128,7 @@ public:
this->tileset = QImage(tilesetFilepath);
this->format = format;
if (this->tileset.format() == QImage::Format::Format_Indexed8 && this->format == TilemapFormat::BPP_4) {
// Squash pixel data to fit 4BPP. Allows project repo to use 8BPP images for 4BPP tilemaps
uchar * pixel = this->tileset.bits();
for (int i = 0; i < this->tileset.sizeInBytes(); i++, pixel++)
*pixel %= 16;
flattenTo4bppImage(&this->tileset);
}
bool err;
if (!palFilepath.isEmpty()) {