summaryrefslogtreecommitdiff
path: root/Userland/Utilities
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2023-01-23 11:00:22 -0500
committerLinus Groh <mail@linusgroh.de>2023-01-23 18:09:23 +0000
commit97568427349b5c7c8632912352e55dd19b579198 (patch)
tree8dc2b88ad80e7626ff40127929ae006645774575 /Userland/Utilities
parent9c5820326d62f52b408d8f4e271d8360108686f2 (diff)
downloadserenity-97568427349b5c7c8632912352e55dd19b579198.zip
LibGfx+icc: Add ICCProfile support for s15Fixed16ArrayType and print it
This is the type of the chromaticAdaptationTag, which is a required tag in v4 profiles for all non-DeviceLink profiles.
Diffstat (limited to 'Userland/Utilities')
-rw-r--r--Userland/Utilities/icc.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/Userland/Utilities/icc.cpp b/Userland/Utilities/icc.cpp
index 7f38fd672c..a92ec51d4e 100644
--- a/Userland/Utilities/icc.cpp
+++ b/Userland/Utilities/icc.cpp
@@ -102,6 +102,25 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
record.iso_3166_1_country_code >> 8, record.iso_3166_1_country_code & 0xff,
record.text);
}
+ } else if (tag_data->type() == Gfx::ICC::S15Fixed16ArrayTagData::Type) {
+ // This tag can contain arbitrarily many fixed-point numbers, but in practice it's
+ // exclusively used for the 'chad' tag, where it always contains 9 values that
+ // represent a 3x3 matrix. So print the values in groups of 3.
+ auto& fixed_array = static_cast<Gfx::ICC::S15Fixed16ArrayTagData&>(*tag_data);
+ out(" [");
+ int i = 0;
+ for (auto value : fixed_array.values()) {
+ if (i > 0) {
+ out(",");
+ if (i % 3 == 0) {
+ outln();
+ out(" ");
+ }
+ }
+ out(" {}", value);
+ i++;
+ }
+ outln(" ]");
} else if (tag_data->type() == Gfx::ICC::TextDescriptionTagData::Type) {
auto& text_description = static_cast<Gfx::ICC::TextDescriptionTagData&>(*tag_data);
outln(" ascii: \"{}\"", text_description.ascii_description());