11#define TILE_DATA_SIZE(pixelSize) ((pixelSize) * KisTileData::WIDTH * KisTileData::HEIGHT)
38 QString header =
getHeader(tile, bytesWritten);
40 retval = store.
write(header.toLatin1());
42 warnFile <<
"Failed to write the tile header";
46 warnFile <<
"Failed to write the tile data";
59 if (headerItems.size() == 4) {
60 qint32 x = headerItems.takeFirst().toInt();
61 qint32 y = headerItems.takeFirst().toInt();
62 QString compressionName = headerItems.takeFirst();
63 qint32 dataSize = headerItems.takeFirst().toInt();
65 Q_ASSERT(headerItems.isEmpty());
68 qint32 row =
yToRow(dm, y);
69 qint32 col =
xToCol(dm, x);
108 qint32 &bytesWritten)
112 qint32 compressedBytes;
114 Q_UNUSED(bufferSize);
115 Q_ASSERT(bufferSize >= tileDataSize + 1);
125 if(compressedBytes < tileDataSize) {
128 bytesWritten = compressedBytes + 1;
132 memcpy(buffer + 1, tileData->
data(), tileDataSize);
133 bytesWritten = tileDataSize + 1;
150 if (bytesWritten == tileDataSize) {
159 memcpy(tileData->
data(), buffer + 1, tileDataSize);
173 static const qint32 QINT32_LENGTH = 11;
174 static const qint32 COMPRESSION_NAME_LENGTH = 5;
175 static const qint32 SEPARATORS_LENGTH = 4;
177 return 3 * QINT32_LENGTH + COMPRESSION_NAME_LENGTH + SEPARATORS_LENGTH;
181 qint32 compressedSize)
184 qint32 width, height;
185 tile->
extent().getRect(&x, &y, &width, &height);
187 return QString(
"%1,%2,%3,%4\n").arg(x).arg(y).arg(
m_compressionName).arg(compressedSize);
virtual qint32 decompress(const quint8 *input, qint32 inputLength, quint8 *output, qint32 outputLength)=0
static void linearizeColors(quint8 *input, quint8 *output, qint32 dataSize, qint32 pixelSize)
static void delinearizeColors(quint8 *input, quint8 *output, qint32 dataSize, qint32 pixelSize)
virtual qint32 outputBufferSize(qint32 dataSize)=0
virtual qint32 compress(const quint8 *input, qint32 inputLength, quint8 *output, qint32 outputLength)=0
qint32 xToCol(KisTiledDataManager *dm, qint32 x)
qint32 yToRow(KisTiledDataManager *dm, qint32 y)
qint32 pixelSize(KisTiledDataManager *dm)
virtual bool write(const QByteArray &data)=0
KisAbstractCompression * m_compression
~KisTileCompressor2() override
static const QString m_compressionName
void prepareStreamingBuffer(qint32 tileDataSize)
bool writeTile(KisTileSP tile, KisPaintDeviceWriter &store) override
QByteArray m_streamingBuffer
bool decompressTileData(quint8 *buffer, qint32 bufferSize, KisTileData *tileData) override
qint32 tileDataBufferSize(KisTileData *tileData) override
void prepareWorkBuffers(qint32 tileDataSize)
QByteArray m_linearizationBuffer
QByteArray m_compressionBuffer
QString getHeader(KisTileSP tile, qint32 compressedSize)
bool readTile(QIODevice *io, KisTiledDataManager *dm) override
static const qint8 RAW_DATA_FLAG
static const qint8 COMPRESSED_DATA_FLAG
void compressTileData(KisTileData *tileData, quint8 *buffer, qint32 bufferSize, qint32 &bytesWritten) override
quint32 pixelSize() const
KisTileData * tileData() const
void unlockForRead() const
KisTileSP getTile(qint32 col, qint32 row, bool writable)
#define TILE_DATA_SIZE(pixelSize)