diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-05-31 14:43:07 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-05-31 22:23:40 +0200 |
commit | 5ea6da55e0d29a0dc526d4fa78a0590e0e4df8f6 (patch) | |
tree | 7e42982bb1ee44d57491da1c93878a9135268a04 /src/gui/painting/qcolortransform.cpp | |
parent | fb8a88b05cd3f7663efaa9c5c5cf8143a1f2b66f (diff) |
Test prepared qcolortransform
Add test of explicitly prepared qcolortransform, this is a state
a transform can get into if used for an image transform.
Also cleans up the test code.
Change-Id: I9445ed114bed0edc790e14024aaae6a42989220b
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'src/gui/painting/qcolortransform.cpp')
-rw-r--r-- | src/gui/painting/qcolortransform.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/gui/painting/qcolortransform.cpp b/src/gui/painting/qcolortransform.cpp index c89909cff4..958d2fd2db 100644 --- a/src/gui/painting/qcolortransform.cpp +++ b/src/gui/painting/qcolortransform.cpp @@ -159,9 +159,15 @@ QRgb QColorTransform::map(QRgb argb) const return argb; constexpr float f = 1.0f / 255.0f; QColorVector c = { qRed(argb) * f, qGreen(argb) * f, qBlue(argb) * f }; - c.x = d->colorSpaceIn->trc[0].apply(c.x); - c.y = d->colorSpaceIn->trc[1].apply(c.y); - c.z = d->colorSpaceIn->trc[2].apply(c.z); + if (d->colorSpaceIn->lut.generated.loadAcquire()) { + c.x = d->colorSpaceIn->lut[0]->toLinear(c.x); + c.y = d->colorSpaceIn->lut[1]->toLinear(c.y); + c.z = d->colorSpaceIn->lut[2]->toLinear(c.z); + } else { + c.x = d->colorSpaceIn->trc[0].apply(c.x); + c.y = d->colorSpaceIn->trc[1].apply(c.y); + c.z = d->colorSpaceIn->trc[2].apply(c.z); + } c = d->colorMatrix.map(c); c.x = std::max(0.0f, std::min(1.0f, c.x)); c.y = std::max(0.0f, std::min(1.0f, c.y)); @@ -190,9 +196,15 @@ QRgba64 QColorTransform::map(QRgba64 rgba64) const return rgba64; constexpr float f = 1.0f / 65535.0f; QColorVector c = { rgba64.red() * f, rgba64.green() * f, rgba64.blue() * f }; - c.x = d->colorSpaceIn->trc[0].apply(c.x); - c.y = d->colorSpaceIn->trc[1].apply(c.y); - c.z = d->colorSpaceIn->trc[2].apply(c.z); + if (d->colorSpaceIn->lut.generated.loadAcquire()) { + c.x = d->colorSpaceIn->lut[0]->toLinear(c.x); + c.y = d->colorSpaceIn->lut[1]->toLinear(c.y); + c.z = d->colorSpaceIn->lut[2]->toLinear(c.z); + } else { + c.x = d->colorSpaceIn->trc[0].apply(c.x); + c.y = d->colorSpaceIn->trc[1].apply(c.y); + c.z = d->colorSpaceIn->trc[2].apply(c.z); + } c = d->colorMatrix.map(c); c.x = std::max(0.0f, std::min(1.0f, c.x)); c.y = std::max(0.0f, std::min(1.0f, c.y)); |