mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2026-02-21 23:43:03 -05:00
Fix assert on broken data
The nan eventually ends up in qRound inside Qt code. That asserts because it doesn't know what to do with a nan
This commit is contained in:
@ -1808,7 +1808,18 @@ bool XCFImageFormat::assignImageBytes(Layer &layer, uint i, uint j, const GimpPr
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QImage::Format_RGBA16FPx4:
|
case QImage::Format_RGBA16FPx4:
|
||||||
static_assert(sizeof(QRgbaFloat16) == sizeof(QRgba64), "Different sizes for float and int 16 bit pixels");
|
for (int y = 0; y < height; y++) {
|
||||||
|
const size_t bpl = width * sizeof(QRgbaFloat16);
|
||||||
|
qFromBigEndian<qint16>(tile + y * bpl, width * 4, image.scanLine(y));
|
||||||
|
|
||||||
|
const qfloat16 *dataPtr = reinterpret_cast<qfloat16 *>(image.scanLine(y));
|
||||||
|
for (int x = 0; x < width * 4; ++x) {
|
||||||
|
if (dataPtr[x].isNaN()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case QImage::Format_RGBA64:
|
case QImage::Format_RGBA64:
|
||||||
for (int y = 0; y < height; y++) {
|
for (int y = 0; y < height; y++) {
|
||||||
@ -1821,6 +1832,13 @@ bool XCFImageFormat::assignImageBytes(Layer &layer, uint i, uint j, const GimpPr
|
|||||||
for (int y = 0; y < height; y++) {
|
for (int y = 0; y < height; y++) {
|
||||||
const size_t bpl = width * sizeof(QRgbaFloat32);
|
const size_t bpl = width * sizeof(QRgbaFloat32);
|
||||||
qFromBigEndian<qint32>(tile + y * bpl, width * 4, image.scanLine(y));
|
qFromBigEndian<qint32>(tile + y * bpl, width * 4, image.scanLine(y));
|
||||||
|
|
||||||
|
const float *dataPtr = reinterpret_cast<float *>(image.scanLine(y));
|
||||||
|
for (int x = 0; x < width * 4; ++x) {
|
||||||
|
if (std::isnan(dataPtr[x])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QImage::Format_RGBX32FPx4:
|
case QImage::Format_RGBX32FPx4:
|
||||||
|
|||||||
Reference in New Issue
Block a user