/** * cd_util_icc_set_metadata_coverage: **/ static gboolean cd_util_icc_set_metadata_coverage (CdIcc *icc, GError **error) { const gchar *tmp; gdouble coverage = 0.0f; g_autofree gchar *coverage_tmp = NULL; g_autoptr(CdIcc) icc_srgb = NULL; /* is sRGB? */ tmp = cd_icc_get_metadata_item (icc, CD_PROFILE_METADATA_STANDARD_SPACE); if (g_strcmp0 (tmp, "srgb") == 0) return TRUE; /* calculate coverage (quite expensive to calculate, hence metadata) */ icc_srgb = cd_icc_new (); if (!cd_icc_create_default (icc_srgb, error)) return FALSE; if (!cd_icc_utils_get_coverage (icc_srgb, icc, &coverage, error)) return FALSE; if (coverage > 0.0) { coverage_tmp = g_strdup_printf ("%.2f", coverage); cd_icc_add_metadata (icc, "GAMUT_coverage(srgb)", coverage_tmp); } return TRUE; }
/** * cd_util_get_coverage: * @profile: A valid #CdUtil * @filename_in: A filename to proof against * @error: A #GError, or %NULL * * Gets the gamut coverage of two profiles * * Return value: A positive value for success, or -1.0 for error. **/ static gdouble cd_util_get_coverage (cmsHPROFILE profile_proof, const gchar *filename_in, GError **error) { gdouble coverage = -1.0; gboolean ret; GFile *file = NULL; CdIcc *icc = NULL; CdIcc *icc_ref; /* load proofing profile */ icc_ref = cd_icc_new (); ret = cd_icc_load_handle (icc_ref, profile_proof, CD_ICC_LOAD_FLAGS_NONE, error); if (!ret) goto out; /* load target profile */ icc = cd_icc_new (); file = g_file_new_for_path (filename_in); ret = cd_icc_load_file (icc, file, CD_ICC_LOAD_FLAGS_NONE, NULL, error); if (!ret) goto out; /* get coverage */ ret = cd_icc_utils_get_coverage (icc, icc_ref, &coverage, error); if (!ret) return FALSE; out: if (file != NULL) g_object_unref (file); if (icc != NULL) g_object_unref (icc); g_object_unref (icc_ref); return ret; }