/** * gimp_color_profile_new_from_icc_profile: * @data: pointer to memory containing an ICC profile * @length: lenght of the profile in memory, in bytes * @error: return location for #GError * * This function opens an ICC color profile from memory. On error, * %NULL is returned and @error is set. * * Return value: the #GimpColorProfile, or %NULL. * * Since: 2.10 **/ GimpColorProfile * gimp_color_profile_new_from_icc_profile (const guint8 *data, gsize length, GError **error) { cmsHPROFILE lcms_profile; GimpColorProfile *profile = NULL; g_return_val_if_fail (data != NULL, NULL); g_return_val_if_fail (length > 0, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); lcms_profile = cmsOpenProfileFromMem (data, length); if (lcms_profile) { profile = g_object_new (GIMP_TYPE_COLOR_PROFILE, NULL); profile->priv->lcms_profile = lcms_profile; profile->priv->data = g_memdup (data, length); profile->priv->length = length; } else { g_set_error_literal (error, gimp_color_profile_error_quark (), 0, _("Data does not appear to be an ICC color profile")); } return profile; }
/** * gimp_color_profile_dave_to_data: * @profile: a #GimpColorProfile * @length: return location for the number of bytes written * @error: return location for #GError * * This function saves @profile to an ICC color profile in newly * allocated memory. On error, %NULL is returned and @error is set. * * Return value: a pointer to the written IIC profile in memory, or * %NULL. Free with g_free(). * * Since: 2.10 **/ guint8 * gimp_color_profile_save_to_data (GimpColorProfile profile, gsize *length, GError **error) { cmsUInt32Number size; g_return_val_if_fail (profile != NULL, NULL); g_return_val_if_fail (length != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); if (cmsSaveProfileToMem (profile, NULL, &size)) { guint8 *data = g_malloc (size); if (cmsSaveProfileToMem (profile, data, &size)) { *length = size; return data; } g_free (data); } g_set_error_literal (error, gimp_color_profile_error_quark (), 0, _("Could not save color profile to memory")); return NULL; }
/** * gimp_color_profile_open_from_data: * @data: pointer to memory containing an ICC profile * @length: lenght of the profile in memory, in bytes * @error: return location for #GError * * This function opens an ICC color profile from memory. On error, * %NULL is returned and @error is set. * * Return value: the #GimpColorProfile, or %NULL. * * Since: 2.10 **/ GimpColorProfile gimp_color_profile_open_from_data (const guint8 *data, gsize length, GError **error) { GimpColorProfile profile; g_return_val_if_fail (data != NULL, NULL); g_return_val_if_fail (length > 0, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); profile = cmsOpenProfileFromMem (data, length); if (! profile) g_set_error_literal (error, gimp_color_profile_error_quark (), 0, _("Data does not appear to be an ICC color profile")); return profile; }
/** * gimp_color_profile_new_from_lcms_profile: * @lcms_profile: an LCMS cmsHPROFILE pointer * @error: return location for #GError * * This function creates a GimpColorProfile from a cmsHPROFILE. On * error, %NULL is returned and @error is set. The passed * @lcms_profile pointer is not retained by the created * #GimpColorProfile. * * Return value: the #GimpColorProfile, or %NULL. * * Since: 2.10 **/ GimpColorProfile * gimp_color_profile_new_from_lcms_profile (gpointer lcms_profile, GError **error) { cmsUInt32Number size; g_return_val_if_fail (lcms_profile != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); if (cmsSaveProfileToMem (lcms_profile, NULL, &size)) { guint8 *data = g_malloc (size); if (cmsSaveProfileToMem (lcms_profile, data, &size)) { gsize length = size; lcms_profile = cmsOpenProfileFromMem (data, length); if (lcms_profile) { GimpColorProfile *profile; profile = g_object_new (GIMP_TYPE_COLOR_PROFILE, NULL); profile->priv->lcms_profile = lcms_profile; profile->priv->data = data; profile->priv->length = length; return profile; } } g_free (data); } g_set_error_literal (error, gimp_color_profile_error_quark (), 0, _("Could not save color profile to memory")); return NULL; }
/** * gimp_color_profile_new_from_file: * @file: a #GFile * @error: return location for #GError * * This function opens an ICC color profile from @file. * * Return value: the #GimpColorProfile, or %NULL. On error, %NULL is * returned and @error is set. * * Since: 2.10 **/ GimpColorProfile * gimp_color_profile_new_from_file (GFile *file, GError **error) { GimpColorProfile *profile = NULL; cmsHPROFILE lcms_profile = NULL; guint8 *data = NULL; gsize length = 0; gchar *path; g_return_val_if_fail (G_IS_FILE (file), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); path = g_file_get_path (file); if (path) { GMappedFile *mapped; mapped = g_mapped_file_new (path, FALSE, error); if (! mapped) return NULL; length = g_mapped_file_get_length (mapped); data = g_memdup (g_mapped_file_get_contents (mapped), length); lcms_profile = cmsOpenProfileFromMem (data, length); g_mapped_file_unref (mapped); } else { GFileInfo *info; info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE, G_FILE_QUERY_INFO_NONE, NULL, error); if (info) { GInputStream *input; length = g_file_info_get_size (info); data = g_malloc (length); g_object_unref (info); input = G_INPUT_STREAM (g_file_read (file, NULL, error)); if (input) { gsize bytes_read; if (g_input_stream_read_all (input, data, length, &bytes_read, NULL, error) && bytes_read == length) { lcms_profile = cmsOpenProfileFromMem (data, length); } g_object_unref (input); } } } if (lcms_profile) { profile = g_object_new (GIMP_TYPE_COLOR_PROFILE, NULL); profile->priv->lcms_profile = lcms_profile; profile->priv->data = data; profile->priv->length = length; } else { if (data) g_free (data); if (error && *error == NULL) { g_set_error (error, gimp_color_profile_error_quark (), 0, _("'%s' does not appear to be an ICC color profile"), gimp_file_get_utf8_name (file)); } } return profile; }
/** * gimp_color_profile_open_from_file: * @file: a #GFile * @error: return location for #GError * * This function opens an ICC color profile from @file. * * Return value: the #GimpColorProfile, or %NULL. On error, %NULL is * returned and @error is set. * * Since: 2.10 **/ GimpColorProfile gimp_color_profile_open_from_file (GFile *file, GError **error) { GimpColorProfile profile = NULL; gchar *path; g_return_val_if_fail (G_IS_FILE (file), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); path = g_file_get_path (file); if (path) { GMappedFile *mapped; const guint8 *data; gsize length; mapped = g_mapped_file_new (path, FALSE, error); if (! mapped) return NULL; data = (const guint8 *) g_mapped_file_get_contents (mapped); length = g_mapped_file_get_length (mapped); profile = cmsOpenProfileFromMem (data, length); g_mapped_file_unref (mapped); } else { GFileInfo *info; info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE, G_FILE_QUERY_INFO_NONE, NULL, error); if (info) { GInputStream *input; goffset length = g_file_info_get_size (info); guint8 *data = g_malloc (length); g_object_unref (info); input = G_INPUT_STREAM (g_file_read (file, NULL, error)); if (input) { gsize bytes_read; if (g_input_stream_read_all (input, data, length, &bytes_read, NULL, error) && bytes_read == length) { profile = cmsOpenProfileFromMem (data, length); } g_object_unref (input); } g_free (data); } } if (! profile && error && *error == NULL) g_set_error (error, gimp_color_profile_error_quark (), 0, _("'%s' does not appear to be an ICC color profile"), gimp_file_get_utf8_name (file)); return profile; }