File indexing completed on 2024-06-09 04:27:49
0001 /* 0002 * SPDX-FileCopyrightText: 2007 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_tga_export.h" 0008 0009 #include <QCheckBox> 0010 #include <QSlider> 0011 0012 #include <kpluginfactory.h> 0013 #include <QFileInfo> 0014 #include <QApplication> 0015 #include <KoColorModelStandardIds.h> 0016 #include <KisExportCheckRegistry.h> 0017 #include <KisImportExportManager.h> 0018 #include <kis_paint_device.h> 0019 #include <KisDocument.h> 0020 #include <kis_image.h> 0021 #include <kis_paint_layer.h> 0022 0023 #include "tga.h" 0024 0025 K_PLUGIN_FACTORY_WITH_JSON(KisTGAExportFactory, "krita_tga_export.json", registerPlugin<KisTGAExport>();) 0026 0027 KisTGAExport::KisTGAExport(QObject *parent, const QVariantList &) : KisImportExportFilter(parent) 0028 { 0029 } 0030 0031 KisTGAExport::~KisTGAExport() 0032 { 0033 } 0034 0035 KisImportExportErrorCode KisTGAExport::convert(KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration) 0036 { 0037 Q_UNUSED(configuration); 0038 QRect rc = document->savingImage()->bounds(); 0039 QImage image = document->savingImage()->projection()->convertToQImage(0, 0, 0, rc.width(), rc.height(), KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::internalConversionFlags()); 0040 0041 QDataStream s(io); 0042 s.setByteOrder(QDataStream::LittleEndian); 0043 0044 const QImage& img = image; 0045 const bool hasAlpha = (img.format() == QImage::Format_ARGB32); 0046 static constexpr quint8 originTopLeft = TGA_ORIGIN_UPPER + TGA_ORIGIN_LEFT; // 0x20 0047 static constexpr quint8 alphaChannel8Bits = 0x08; 0048 0049 for (int i = 0; i < 12; i++) 0050 s << targaMagic[i]; 0051 0052 // write header 0053 s << quint16(img.width()); // width 0054 s << quint16(img.height()); // height 0055 s << quint8(hasAlpha ? 32 : 24); // depth (24 bit RGB + 8 bit alpha) 0056 s << quint8(hasAlpha ? originTopLeft + alphaChannel8Bits : originTopLeft); // top left image (0x20) + 8 bit alpha (0x8) 0057 0058 for (int y = 0; y < img.height(); y++) { 0059 for (int x = 0; x < img.width(); x++) { 0060 const QRgb color = img.pixel(x, y); 0061 s << quint8(qBlue(color)); 0062 s << quint8(qGreen(color)); 0063 s << quint8(qRed(color)); 0064 if (hasAlpha) 0065 s << quint8(qAlpha(color)); 0066 } 0067 } 0068 0069 return ImportExportCodes::OK; 0070 } 0071 0072 void KisTGAExport::initializeCapabilities() 0073 { 0074 0075 QList<QPair<KoID, KoID> > supportedColorModels; 0076 supportedColorModels << QPair<KoID, KoID>() 0077 << QPair<KoID, KoID>(RGBAColorModelID, Integer8BitsColorDepthID); 0078 addSupportedColorModels(supportedColorModels, "TGA"); 0079 } 0080 0081 0082 0083 #include "kis_tga_export.moc" 0084