kimgio: theoretical big-endian support for ICO format

there is a lot of code that is not big-endian tested (not just in the
ico plugin)

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-10-20 18:53:38 +03:00
parent 00fe546231
commit bb976aeff7
2 changed files with 21 additions and 2 deletions

View file

@ -240,8 +240,16 @@ bool ICOHandler::read(QImage *image)
switch (bmpbpp) {
case 32: {
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
QRgb* bmpimagebits = reinterpret_cast<QRgb*>(bmpimage.bits());
for (uint bi = 0; bi < bmpimagesize && bi < imageboundary; bi += 4) {
*bmpimagebits = qRgba(imagebytes.at(bi + 2), imagebytes.at(bi + 1), imagebytes.at(bi), imagebytes.at(bi + 3));
bmpimagebits++;
}
#else
char* bmpimagebits = reinterpret_cast<char*>(bmpimage.bits());
::memcpy(bmpimagebits, imagebytes.constData(), imageboundary * sizeof(char));
#endif
break;
}
case 24: {
@ -340,8 +348,20 @@ bool ICOHandler::write(const QImage &image)
datastream << bmpncolors;
datastream << bmpnimportantcolors;
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
const QRgb* bmpimagebits = reinterpret_cast<const QRgb*>(bmpimage.constBits());
for (uint bi = 0; bi < bmpimagesize; bi += 4) {
const uchar bmpb = qBlue(*bmpimagebits);
const uchar bmpg = qGreen(*bmpimagebits);
const uchar bmpr = qRed(*bmpimagebits);
const uchar bmpa = qAlpha(*bmpimagebits);
datastream << bmpb << bmpg << bmpr << bmpa;
bmpimagebits++;
}
#else
const char* bmpimagebits = reinterpret_cast<const char*>(bmpimage.constBits());
datastream.writeRawData(bmpimagebits, bmpimagesize);
#endif
return (datastream.status() == QDataStream::Ok);
}

View file

@ -138,6 +138,7 @@ bool WebPHandler::write(const QImage &image)
uint8_t *webpoutput = nullptr;
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
// TODO: move alpha?
const size_t webpsize = WebPEncodeRGBA(
#else
const size_t webpsize = WebPEncodeBGRA(
@ -323,6 +324,4 @@ QImageIOHandler *WebPPlugin::create(QIODevice *device, const QByteArray &format)
return handler;
}
//---------------------------------------------------------------------
Q_EXPORT_PLUGIN2(webp, WebPPlugin)