summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2022-12-26 08:21:54 -0500
committerAndrew Kaster <andrewdkaster@gmail.com>2022-12-27 07:44:37 -0700
commit7f52f45e9d7704b684714201af138974adfcfcfe (patch)
treed962a80f9c38b7ee43705fc4b98c5ac81df67420
parentd8867f8077c9a71c51ca0493f83b2d88145169d3 (diff)
downloadserenity-7f52f45e9d7704b684714201af138974adfcfcfe.zip
LibGfx: Start adding a utility for handling ICC color profiles
For now, this dumps file version and device class. https://github.com/saucecontrol/compact-icc-profiles has good test inputs.
-rw-r--r--Meta/Lagom/CMakeLists.txt3
-rw-r--r--Userland/Utilities/CMakeLists.txt1
-rw-r--r--Userland/Utilities/icc.cpp27
3 files changed, 31 insertions, 0 deletions
diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt
index dbf2aefed2..3082f38d83 100644
--- a/Meta/Lagom/CMakeLists.txt
+++ b/Meta/Lagom/CMakeLists.txt
@@ -482,6 +482,9 @@ if (BUILD_LAGOM)
target_link_libraries(headless-browser LibWeb LibWebSocket LibCrypto LibGemini LibHTTP LibJS LibGfx LibMain LibTLS LibIPC LibJS)
endif()
+ add_executable(icc ../../Userland/Utilities/icc.cpp)
+ target_link_libraries(icc LibCore LibGfx LibMain)
+
add_executable(js ../../Userland/Utilities/js.cpp)
target_link_libraries(js LibCrypto LibJS LibLine LibLocale LibMain LibTextCodec Threads::Threads)
if (EMSCRIPTEN)
diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt
index ee44b5ed78..52e67a629d 100644
--- a/Userland/Utilities/CMakeLists.txt
+++ b/Userland/Utilities/CMakeLists.txt
@@ -90,6 +90,7 @@ target_link_libraries(grep PRIVATE LibRegex)
target_link_libraries(gunzip PRIVATE LibCompress)
target_link_libraries(gzip PRIVATE LibCompress)
target_link_libraries(headless-browser PRIVATE LibCrypto LibGemini LibGfx LibHTTP LibTLS LibWeb LibWebSocket LibIPC LibJS)
+target_link_libraries(icc PRIVATE LibGfx)
target_link_libraries(jail-attach PRIVATE LibCore LibMain)
target_link_libraries(jail-create PRIVATE LibCore LibMain)
target_link_libraries(js PRIVATE LibCrypto LibJS LibLine LibLocale LibTextCodec)
diff --git a/Userland/Utilities/icc.cpp b/Userland/Utilities/icc.cpp
new file mode 100644
index 0000000000..87239f834c
--- /dev/null
+++ b/Userland/Utilities/icc.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022, Nico Weber <thakis@chromium.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <AK/StringView.h>
+#include <LibCore/ArgsParser.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()));
+
+ return 0;
+}