[gimp] libgimpcolor: add gimp_lcms_add_linear_rgb_profile()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] libgimpcolor: add gimp_lcms_add_linear_rgb_profile()
- Date: Tue, 12 May 2015 20:47:48 +0000 (UTC)
commit ff337409c19a0359d36c59a24494425f2e07b42c
Author: Michael Natterer <mitch gimp org>
Date: Tue May 12 22:47:12 2015 +0200
libgimpcolor: add gimp_lcms_add_linear_rgb_profile()
taken from gegl:lcms-from-profile.
libgimpcolor/gimpcolor.def | 1 +
libgimpcolor/gimplcms.c | 74 ++++++++++++++++++++++++++++++++++++++++++++
libgimpcolor/gimplcms.h | 1 +
3 files changed, 76 insertions(+), 0 deletions(-)
---
diff --git a/libgimpcolor/gimpcolor.def b/libgimpcolor/gimpcolor.def
index 61563e3..540b1df 100644
--- a/libgimpcolor/gimpcolor.def
+++ b/libgimpcolor/gimpcolor.def
@@ -37,6 +37,7 @@ EXPORTS
gimp_hsv_to_rgb_int
gimp_hsva_set
gimp_hwb_to_rgb
+ gimp_lcms_create_linear_rgb_profile
gimp_lcms_create_srgb_profile
gimp_lcms_get_format
gimp_lcms_profile_close
diff --git a/libgimpcolor/gimplcms.c b/libgimpcolor/gimplcms.c
index 25ec44b..3b78219 100644
--- a/libgimpcolor/gimplcms.c
+++ b/libgimpcolor/gimplcms.c
@@ -621,6 +621,80 @@ gimp_lcms_create_srgb_profile (void)
return gimp_lcms_profile_open_from_data (profile_data, profile_length, NULL);
}
+static GimpColorProfile
+gimp_lcms_create_linear_rgb_profile_internal (void)
+{
+ cmsHPROFILE profile;
+
+ /* white point is D65 from the sRGB specs */
+ cmsCIExyY whitepoint = { 0.3127, 0.3290, 1.0 };
+
+ /* primaries are ITU‐R BT.709‐5 (xYY), which are also the primaries
+ * from the sRGB specs, modified to properly account for hexadecimal
+ * quantization during the profile making process.
+ */
+ cmsCIExyYTRIPLE primaries =
+ {
+ /* R { 0.6400, 0.3300, 1.0 }, */
+ /* G { 0.3000, 0.6000, 1.0 }, */
+ /* B { 0.1500, 0.0600, 1.0 } */
+ /* R */ { 0.639998686, 0.330010138, 1.0 },
+ /* G */ { 0.300003784, 0.600003357, 1.0 },
+ /* B */ { 0.150002046, 0.059997204, 1.0 }
+ };
+
+ /* linear light */
+ cmsToneCurve *linear[3];
+
+ linear[0] = linear[1] = linear[2] = cmsBuildGamma (NULL, 1.0);
+
+ /* create the profile, cleanup, and return */
+ profile = cmsCreateRGBProfile (&whitepoint, &primaries, linear);
+ cmsFreeToneCurve (linear[0]);
+
+ gimp_lcms_profile_set_tag (profile, cmsSigProfileDescriptionTag,
+ "GIMP built-in Linear RGB");
+ gimp_lcms_profile_set_tag (profile, cmsSigDeviceMfgDescTag,
+ "GIMP");
+ gimp_lcms_profile_set_tag (profile, cmsSigDeviceModelDescTag,
+ "Linear RGB");
+ gimp_lcms_profile_set_tag (profile, cmsSigCopyrightTag,
+ "Public Domain");
+
+ return profile;
+}
+
+/**
+ * gimp_lcms_create_linear_rgb_profile:
+ *
+ * This function creates a profile for babl_model("RGB"). Please
+ * somebody write someting smarter here.
+ *
+ * Return value: the linear RGB cmsHPROFILE.
+ *
+ * Since: GIMP 2.10
+ **/
+GimpColorProfile
+gimp_lcms_create_linear_rgb_profile (void)
+{
+ static guint8 *profile_data = NULL;
+ static gsize profile_length = 0;
+
+ if (G_UNLIKELY (profile_data == NULL))
+ {
+ GimpColorProfile profile;
+
+ profile = gimp_lcms_create_linear_rgb_profile_internal ();
+
+ profile_data = gimp_lcms_profile_save_to_data (profile, &profile_length,
+ NULL);
+
+ gimp_lcms_profile_close (profile);
+ }
+
+ return gimp_lcms_profile_open_from_data (profile_data, profile_length, NULL);
+}
+
/**
* gimp_lcms_get_format:
* @format: a #Babl format
diff --git a/libgimpcolor/gimplcms.h b/libgimpcolor/gimplcms.h
index 6e09bc4..752baf5 100644
--- a/libgimpcolor/gimplcms.h
+++ b/libgimpcolor/gimplcms.h
@@ -57,6 +57,7 @@ gboolean gimp_lcms_profile_is_rgb (GimpColorProfile profil
gboolean gimp_lcms_profile_is_cmyk (GimpColorProfile profile);
GimpColorProfile gimp_lcms_create_srgb_profile (void);
+GimpColorProfile gimp_lcms_create_linear_rgb_profile(void);
const Babl * gimp_lcms_get_format (const Babl *format,
guint32 *lcms_format);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]