From 8ef331052577d31d9746038ceb70b1c83bba4e68 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sat, 13 Jan 2024 21:44:32 -0500 Subject: [PATCH] test-jpeg-roundtrip: Print perceived delta of fixpoint to start color --- Userland/Utilities/test-jpeg-roundtrip.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Userland/Utilities/test-jpeg-roundtrip.cpp b/Userland/Utilities/test-jpeg-roundtrip.cpp index 73b0df1e74..3c5fb777de 100644 --- a/Userland/Utilities/test-jpeg-roundtrip.cpp +++ b/Userland/Utilities/test-jpeg-roundtrip.cpp @@ -4,6 +4,9 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include +#include +#include #include #include #include @@ -38,10 +41,23 @@ static ErrorOr compute_fixpoint(Gfx::Color start_color) return Fixpoint { last_color, number_of_iterations }; } +static ErrorOr perceived_distance_in_sRGB(Gfx::Color a, Gfx::Color b) +{ + auto sRGB = TRY(Gfx::ICC::sRGB()); + + Array array_a { a.red(), a.green(), a.blue() }; + Array array_b { b.red(), b.green(), b.blue() }; + + return DeltaE(TRY(sRGB->to_lab(array_a)), TRY(sRGB->to_lab(array_b))); +} + static ErrorOr test(Gfx::Color color) { auto fixpoint = TRY(compute_fixpoint(color)); - outln("color {} converges to {} after saving {} times", color, fixpoint.fixpoint, fixpoint.number_of_iterations); + + float perceived_distance = TRY(perceived_distance_in_sRGB(color, fixpoint.fixpoint)); + + outln("color {} converges to {} after saving {} times, delta {}", color, fixpoint.fixpoint, fixpoint.number_of_iterations, perceived_distance); return {}; }