Quellcode durchsuchen

LibPDF: Clamp linear_srgb values in convert_to_srgb()

This is very crude gamut mapping, but it's better than producing
NaNs when passing negative values to powf(x, 1/2.2).
Nico Weber vor 1 Jahr
Ursprung
Commit
d577d181e3
1 geänderte Dateien mit 3 neuen und 0 gelöschten Zeilen
  1. 3 0
      Userland/Libraries/LibPDF/ColorSpace.cpp

+ 3 - 0
Userland/Libraries/LibPDF/ColorSpace.cpp

@@ -302,6 +302,9 @@ constexpr Array<float, 3> convert_to_srgb(Array<float, 3> xyz)
     };
 
     auto linear_srgb = matrix_multiply(conversion_matrix, xyz);
+    linear_srgb[0] = clamp(linear_srgb[0], 0.0f, 1.0f);
+    linear_srgb[1] = clamp(linear_srgb[1], 0.0f, 1.0f);
+    linear_srgb[2] = clamp(linear_srgb[2], 0.0f, 1.0f);
 
     // FIXME: Use the real sRGB curve by replacing this function with Gfx::ICC::sRGB().from_pcs().
     return { pow(linear_srgb[0], 1.0f / 2.2f), pow(linear_srgb[1], 1.0f / 2.2f), pow(linear_srgb[2], 1.0f / 2.2f) };