diff options
author | Nico Weber <thakis@chromium.org> | 2023-01-29 13:05:21 -0500 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-02-01 19:19:30 +0100 |
commit | fb79fc0ba66531a547a87ec60c3fed9ccd816023 (patch) | |
tree | daaea225380995f1770967c2cabd82f21eb8de92 /Tests/LibGfx/TestICCProfile.cpp | |
parent | d43b306814aff2f3cf7064a3765b03a6b092847b (diff) | |
download | serenity-fb79fc0ba66531a547a87ec60c3fed9ccd816023.zip |
Tests: Add a basic ICC profile test
icc-v4.jpg is Meta/Websites/serenityos.org/happy/3rd/bgianf.jpg.
There are a whole bunch of jpgs with v4 color profiles and I just picked
one fairly arbitrarily. It looks like a fairly standard v4 matrix
profile that in this form is also present in many jpgs taken by mobile
phone cameras. It uses parametric curves.
icc-v2.png is based on ./Documentation/WebServer_localhost.jpg since
that is the only image in the repo with a v2 color profile. It also has
all kinds of interesting and somewhat exotic tags, such as an 'dscm' (an
Apple extension to have a description of type 'mluc', since normal
'desc' is required ot have type 'desc' in v2 files -- in v4, 'desc' has
type 'mluc') tag of type 'mluc' that actually contains data in several
languages and that exercises the non-BMP UTF-16BE decoder. It's however
still also a fairly standard v2 matrix profile, which uses 'curv'
instead of 'para' for its curves ('para' is v4-only).
I converted that jpeg file to png, and cropped most of the image
data to save on file size by running:
sips -s format png --cropToHeightWidth 21 42 in.jpg --out out.png
Diffstat (limited to 'Tests/LibGfx/TestICCProfile.cpp')
-rw-r--r-- | Tests/LibGfx/TestICCProfile.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Tests/LibGfx/TestICCProfile.cpp b/Tests/LibGfx/TestICCProfile.cpp new file mode 100644 index 0000000000..1ad04195cf --- /dev/null +++ b/Tests/LibGfx/TestICCProfile.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023, Nico Weber <thakis@chromium.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <LibCore/MappedFile.h> +#include <LibGfx/ICC/Profile.h> +#include <LibGfx/JPGLoader.h> +#include <LibGfx/PNGLoader.h> +#include <LibTest/TestCase.h> + +#ifdef AK_OS_SERENITY +# define TEST_INPUT(x) ("/usr/Tests/LibGfx/test-inputs/" x) +#else +# define TEST_INPUT(x) ("test-inputs/" x) +#endif + +TEST_CASE(png) +{ + auto file = MUST(Core::MappedFile::map(TEST_INPUT("icc-v2.png"sv))); + auto png = MUST(Gfx::PNGImageDecoderPlugin::create(file->bytes())); + EXPECT(png->initialize()); + auto icc_bytes = MUST(png->icc_data()); + EXPECT(icc_bytes.has_value()); + + auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); + EXPECT(icc_profile->is_v2()); +} + +TEST_CASE(jpg) +{ + auto file = MUST(Core::MappedFile::map(TEST_INPUT("icc-v4.jpg"sv))); + auto jpg = MUST(Gfx::JPGImageDecoderPlugin::create(file->bytes())); + EXPECT(jpg->initialize()); + auto icc_bytes = MUST(jpg->icc_data()); + EXPECT(icc_bytes.has_value()); + + auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); + EXPECT(icc_profile->is_v4()); +} |