Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarImageProcessing.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-21 22:29:40 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-21 22:29:40 +1000
commitf0fec34dc9c2dbc86dd424e4963983cbb2ed9b41 (patch)
tree9073336184d32365b861df91b2fc062c39e0fb15 /source/core/StarImageProcessing.cpp
parent865f9a328a9068c9917c52c387f27b3e102712bc (diff)
The Fontpocalypse
I hate it
Diffstat (limited to 'source/core/StarImageProcessing.cpp')
-rw-r--r--source/core/StarImageProcessing.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/source/core/StarImageProcessing.cpp b/source/core/StarImageProcessing.cpp
index ebb0947..8f0f3f7 100644
--- a/source/core/StarImageProcessing.cpp
+++ b/source/core/StarImageProcessing.cpp
@@ -495,21 +495,23 @@ Image processImageOperations(List<ImageOperation> const& operations, Image image
if (dist < std::numeric_limits<int>::max()) {
float percent = (dist - 1) / (2.0f * pixels - 1);
- Vec4F color = (Vec4F(op->startColor) * ((1.0f - percent) / 255.0f)) + (Vec4F(op->endColor) * (percent / 255.0f));
- color.clamp(0.0f, 1.0f);
+ Color color = Color::rgbaf((Vec4F(op->startColor) * ((1.0f - percent) / 255.0f)) + (Vec4F(op->endColor) * (percent / 255.0f)));
if (pixel[3] != 0) {
- float pixelA = byteToFloat(pixel[3]);
if (op->outlineOnly)
- color[3] *= (1.0f - pixelA);
+ color.setAlphaF(1.0f - byteToFloat(pixel[3]));
else {
- float colorA = pixelA * (1.0f - color[3]);
- color[0] = Color::fromLinear((Color::toLinear(color[0]) * colorA) + (Color::toLinear(byteToFloat(pixel[0])) * pixelA));
- color[1] = Color::fromLinear((Color::toLinear(color[1]) * colorA) + (Color::toLinear(byteToFloat(pixel[1])) * pixelA));
- color[2] = Color::fromLinear((Color::toLinear(color[2]) * colorA) + (Color::toLinear(byteToFloat(pixel[2])) * pixelA));
- color[3] += colorA;
+ Color pixelCol = Color::rgba(pixel);
+ float pixelA = pixelCol.alphaF();
+ float colorA = color.alphaF();
+ colorA += pixelA * (1.0f - colorA);
+ pixelCol.convertToLinear();
+ color.convertToLinear();
+ color.mix(pixelCol, pixelA);
+ color.convertToSRGB();
+ color.setAlphaF(colorA);
}
}
- pixel = Vec4B(color.piecewiseMultiply(Vec4F::filled(255.0f)));
+ pixel = color.toRgba();
}
} else if (op->outlineOnly) {
pixel = Vec4B(0, 0, 0, 0);