mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-28 14:02:51 +00:00
This is a bit messy: The spec says that PCSXYZ and PCSLAB are the only valid profile connection spaces -- except for DeviceLink profles, where all data color spaces are valid. So this uses the existing ColorSpace enum for profile connection spaces instead of adding a dedicated enum, to not duplicate all the color space parsing and printing code. That matches what the spec does, too. This saves about 100 lines of code, at the expense of less type safety -- but further down the line we probably want to be able to compare data color spaces and profile connection spaces, so the type safety would likely get in the way then. (But if not, we can change things around once we get to that point.)
42 lines
1.8 KiB
C++
42 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2022, Nico Weber <thakis@chromium.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/StringView.h>
|
|
#include <LibCore/ArgsParser.h>
|
|
#include <LibCore/DateTime.h>
|
|
#include <LibCore/MappedFile.h>
|
|
#include <LibGfx/ICCProfile.h>
|
|
|
|
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
{
|
|
Core::ArgsParser args_parser;
|
|
|
|
static StringView icc_path;
|
|
args_parser.add_positional_argument(icc_path, "Path to ICC profile", "FILE");
|
|
args_parser.parse(arguments);
|
|
|
|
auto icc_file = TRY(Core::MappedFile::map(icc_path));
|
|
auto profile = TRY(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_file->bytes()));
|
|
|
|
outln("version: {}", profile->version());
|
|
outln("device class: {}", Gfx::ICC::device_class_name(profile->device_class()));
|
|
outln("data color space: {}", Gfx::ICC::data_color_space_name(profile->data_color_space()));
|
|
outln("connection space: {}", Gfx::ICC::profile_connection_space_name(profile->connection_space()));
|
|
outln("creation date and time: {}", Core::DateTime::from_timestamp(profile->creation_timestamp()).to_deprecated_string());
|
|
|
|
auto flags = profile->flags();
|
|
outln("flags: 0x{:08x}", flags.bits());
|
|
outln(" embedded in file: {}", flags.is_embedded_in_file() ? "yes" : "no");
|
|
outln(" can be used independently of embedded color data: {}", flags.can_be_used_independently_of_embedded_color_data() ? "yes" : "no");
|
|
if (auto unknown_icc_bits = flags.icc_bits() & ~Gfx::ICC::Flags::KnownBitsMask)
|
|
outln(" other unknown ICC bits: 0x{:04x}", unknown_icc_bits);
|
|
if (auto color_management_module_bits = flags.color_management_module_bits())
|
|
outln(" CMM bits: 0x{:04x}", color_management_module_bits);
|
|
|
|
outln("rendering intent: {}", Gfx::ICC::rendering_intent_name(profile->rendering_intent()));
|
|
|
|
return 0;
|
|
}
|