45 uncompressedRows.resize(3);
46 compressedRows.resize(3);
48 int compressedSize = 0;
50 for (
int i = 0; i < 3; i++) {
51 const int srcRowOffset = 2 - i;
52 const int srcStep = 4;
53 const int dstStep = 1;
55 for (
int row = 0; row < image.height(); row++) {
56 uncompressedRows[i].append(QByteArray(image.width(),
'\0'));
57 quint8 *dstPtr = (quint8 *)uncompressedRows[i].last().data();
59 const quint8 *srcPtr = image.constScanLine(row) + srcRowOffset;
61 for (
int col = 0; col < image.width(); col++) {
69 if (compressedRows[i].last().isEmpty()) {
73 compressedSize += compressedRows[i].last().size() + 2;
77 if (compressedSize < image.width() * image.height() * 3) {
78 *dstPlanes = compressedRows;
81 *dstPlanes = uncompressedRows;
82 *isCompressed =
false;
111 const quint32 patternVersion = 1;
116 const quint32 patternImageMode = 3;
121 const quint16 patternHeight =
static_cast<quint16
>(pattern->height());
126 const quint16 patternWidth =
static_cast<quint16
>(pattern->width());
130 KisAslWriterUtils::writeUnicodeString<byteOrder>(pattern->name(),
m_device);
135 const QRect patternRect(0, 0, pattern->width(), pattern->height());
139 const quint32 arrayVersion = 3;
145 KisAslWriterUtils::writeRect<byteOrder>(patternRect,
m_device);
149 const quint32 numberOfChannels = 24;
157 sliceQImage(pattern->pattern(), &imagePlanes, &isCompressed);
159 for (
int i = 0; i < 3; i++) {
161 const quint32 planeIsWritten = 1;
168 const quint32 pixelDepth1 = 8;
172 KisAslWriterUtils::writeRect<byteOrder>(patternRect,
m_device);
176 const quint16 pixelDepth2 = 8;
182 const quint8 compressionMethod = isCompressed;
189 Q_FOREACH (
const QByteArray &compressedRow, imagePlanes[i]) {
190 const quint16 compressionRowSize =
static_cast<quint16
>(compressedRow.size());
195 Q_FOREACH (
const QByteArray &rowData, imagePlanes[i]) {
196 const qint64 bytesWritten =
m_device.write(rowData);
197 if (bytesWritten != rowData.size()) {
205 const qint64 currentPos =
m_device.pos();
208 if (currentPos != alignedPos) {