Example #1
0
void fromTexture(TextureFile *texture, const QString &path, const Arguments &args, int num = -1)
{
	QString destPathTexture;
	bool error = false;

	if (args.palette() < 0 || args.palette() >= texture->colorTableCount()) {
		if (texture->colorTableCount() <= 0) {
			destPathTexture = args.destination(path, num);
			if (!saveTextureTo(texture, destPathTexture)) {
				error = true;
			}
		}

		for (int paletteID=0; paletteID<texture->colorTableCount(); ++paletteID) {
			texture->setCurrentColorTable(paletteID);
			destPathTexture = args.destination(path, num, paletteID);
			if (!saveTextureTo(texture, destPathTexture)) {
				error = true;
			}
		}
	} else {
		destPathTexture = args.destination(path, num);
		if (!saveTextureTo(texture, destPathTexture)) {
			error = true;
		}
	}

	if (!error) {
		if (args.exportMeta()) {
			ExtraData meta = texture->extraData();
			if (!meta.fields().isEmpty()) {
				QString destPathMeta = args.destinationMeta(path, num);
				if (!meta.save(destPathMeta)) {
					qWarning() << "Error: Cannot save extra data";
					return;
				} else {
					printf("%s\n", qPrintable(QDir::toNativeSeparators(destPathMeta)));
				}
			}
		}

		if (args.exportPalettes() && texture->depth() < 16) { // Do not use isPaletted for that!
			QImage palette = texture->palette();
			if (!palette.isNull()) {
				QString destPathPalette = args.destinationPalette(path, num);
				if (!palette.save(destPathPalette)) {
					qWarning() << "Error: Cannot save palette";
					return;
				}
				printf("%s\n", qPrintable(QDir::toNativeSeparators(destPathPalette)));
			} else {
				qWarning() << "Warning: No palette to export";
				return;
			}
		}
	}

	if (error) {
		qWarning() << "Error: Cannot save image";
	}
}