mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
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:
parent
00fe546231
commit
bb976aeff7
2 changed files with 21 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue