TGA: Support for TGA specification 2.0

Adds TGA 2.0 compliance:
- Support for Extension Area, Developer Area and Footer (metadata support)
- Support for 15-bit and 16-bit per pixel images (both RGB and Indexed)
- Full support for rotation on reading (we cannot use Qt transformations because only a subset is part of the TGA specification)
- When writing you can choose the supported version (subType)
- Improved writing speed (approximately 10 times) and removed whole image conversions (significant memory savings)

It pass the [TrueVision TGA 2.0 conformance suite](https://github.com/zigimg/test-suite/tree/master/fixtures/tga).

Test changes:
- Read test: added ability to skip a specific test on sequential devices (via JSON behavior file)
- Write test: added the ability to set the subType when writing (via JSON properties file)

Closes #37
This commit is contained in:
Mirco Miranda
2025-08-23 11:20:09 +02:00
committed by Albert Astals Cid
parent f933cbe12d
commit 9c6c0c01ae
31 changed files with 1054 additions and 200 deletions

View File

@ -70,6 +70,15 @@ void setOptionalInfo(QImage &image, const QString &suffix)
}
}
QByteArray readSubType(const QString &suffix)
{
auto obj = readOptionalInfo(suffix);
if (obj.isEmpty()) {
return {};
}
return obj.value("subType").toString().toLatin1();
}
bool checkOptionalInfo(QImage &image, const QString &suffix)
{
auto obj = readOptionalInfo(suffix);
@ -157,6 +166,9 @@ int basicTest(const QString &suffix, bool lossless, bool ignoreDataCheck, bool s
{
QBuffer buffer(&writtenData);
QImageWriter imgWriter(&buffer, format.constData());
auto subType = readSubType(suffix);
if (!subType.isEmpty())
imgWriter.setSubType(subType);
if (lossless) {
imgWriter.setQuality(100);
}