mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
kimageio: read and apply mask for BMP images that are not 32-bit
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
92857996e5
commit
1564dd849f
1 changed files with 19 additions and 4 deletions
|
@ -192,7 +192,7 @@ bool ICOHandler::read(QImage *image)
|
|||
|
||||
// fallbacks
|
||||
const int imagewidth = (icowidth ? icowidth : bmpwidth);
|
||||
const int imageheight = (icoheight ? icoheight : bmpheight);
|
||||
const int imageheight = (icoheight ? icoheight : (bmpheight / 2));
|
||||
|
||||
int imageboundary = 0;
|
||||
QImage::Format imageformat = QImage::Format_ARGB32;
|
||||
|
@ -232,8 +232,7 @@ bool ICOHandler::read(QImage *image)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (bmpimagesize != imageboundary) {
|
||||
// data may be padded
|
||||
if (Q_UNLIKELY(bmpimagesize != imageboundary)) {
|
||||
kDebug() << "BMP and QImage bytes count mismatch" << bmpimagesize << imageboundary;
|
||||
}
|
||||
|
||||
|
@ -264,8 +263,24 @@ bool ICOHandler::read(QImage *image)
|
|||
break;
|
||||
}
|
||||
}
|
||||
// image is flipped vertically
|
||||
|
||||
// NOTE: image and mask are flipped vertically
|
||||
const bool bmphasmask = (bmpbpp != 32 && bmpheight && bmpheight == (icoheight * 2));
|
||||
if (bmphasmask) {
|
||||
QImage bmpmask(imagewidth, imageheight, QImage::Format_Mono);
|
||||
bmpmask.setColor(0, qRgba(255, 255, 255, 255)); // white
|
||||
bmpmask.setColor(1, qRgba(0, 0, 0, 255)); // black
|
||||
char* maskbytes = reinterpret_cast<char*>(bmpmask.bits());
|
||||
if (datastream.readRawData(maskbytes, bmpmask.byteCount()) != bmpmask.byteCount()) {
|
||||
kWarning() << "Could not read image mask data";
|
||||
} else {
|
||||
kDebug() << "Masking image";
|
||||
bmpimage.setAlphaChannel(bmpmask.mirrored(false, true));
|
||||
}
|
||||
}
|
||||
|
||||
*image = bmpimage.mirrored(false, true);
|
||||
|
||||
kDebug() << "Valid BMP image" << ii;
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue