static gboolean gdk_pixbuf__gdip_image_save_PNG_to_callback (GdkPixbufSaveFunc save_func, gpointer user_data, GdkPixbuf *pixbuf, gchar **keys, gchar **values, GError **error) { EncoderParameters encoder_params; LONG compression = 5; if (keys && *keys) { gchar **kiter = keys; gchar **viter = values; while (*kiter) { if (strncmp (*kiter, "tEXt::", 6) == 0) { /* TODO: support exif data and the like */ } else if (strcmp (*kiter, "compression") == 0) { char *endptr = NULL; compression = strtol (*viter, &endptr, 10); if (endptr == *viter) { g_set_error (error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_BAD_OPTION, _("PNG compression level must be a value between 0 and 9; value '%s' could not be parsed."), *viter); return FALSE; } if (compression < 0 || compression > 9) { /* This is a user-visible error; * lets people skip the range-checking * in their app. */ g_set_error (error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_BAD_OPTION, _("PNG compression level must be a value between 0 and 9; value '%d' is not allowed."), (int)compression); return FALSE; } } else { g_warning ("Unrecognized parameter (%s) passed to PNG saver.", *kiter); } ++kiter; ++viter; } } encoder_params.Count = 1; encoder_params.Parameter[0].Guid = EncoderCompression; encoder_params.Parameter[0].Type = EncoderParameterValueTypeLong; encoder_params.Parameter[0].NumberOfValues = 1; encoder_params.Parameter[0].Value = &compression; return gdip_save_pixbuf (pixbuf, L"image/png", &encoder_params, save_func, user_data, error); }
static gboolean gdk_pixbuf__gdip_image_save_TIFF_to_callback (GdkPixbufSaveFunc save_func, gpointer user_data, GdkPixbuf *pixbuf, gchar **keys, gchar **values, GError **error) { return gdip_save_pixbuf (pixbuf, L"image/tiff", NULL, save_func, user_data, error); }
static gboolean gdk_pixbuf__gdip_image_save_JPEG_to_callback (GdkPixbufSaveFunc save_func, gpointer user_data, GdkPixbuf *pixbuf, gchar **keys, gchar **values, GError **error) { EncoderParameters encoder_params; LONG quality = 75; /* default; must be between 0 and 100 */ if (keys && *keys) { gchar **kiter = keys; gchar **viter = values; while (*kiter) { if (strcmp (*kiter, "quality") == 0) { char *endptr = NULL; quality = strtol (*viter, &endptr, 10); if (endptr == *viter) { g_set_error (error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_BAD_OPTION, _("JPEG quality must be a value between 0 and 100; value '%s' could not be parsed."), *viter); return FALSE; } if (quality < 0 || quality > 100) { /* This is a user-visible error; * lets people skip the range-checking * in their app. */ g_set_error (error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_BAD_OPTION, _("JPEG quality must be a value between 0 and 100; value '%d' is not allowed."), (int)quality); return FALSE; } } else { g_warning ("Unrecognized parameter (%s) passed to JPEG saver.", *kiter); } ++kiter; ++viter; } } encoder_params.Count = 1; encoder_params.Parameter[0].Guid = EncoderQuality; encoder_params.Parameter[0].Type = EncoderParameterValueTypeLong; encoder_params.Parameter[0].NumberOfValues = 1; encoder_params.Parameter[0].Value = &quality; return gdip_save_pixbuf (pixbuf, L"image/jpeg", &encoder_params, save_func, user_data, error); }