gdip-pixbuf-loader r43 - in trunk: . src
- From: doml svn gnome org
- To: svn-commits-list gnome org
- Subject: gdip-pixbuf-loader r43 - in trunk: . src
- Date: Mon, 3 Mar 2008 23:22:41 +0000 (GMT)
Author: doml
Date: Mon Mar 3 23:22:41 2008
New Revision: 43
URL: http://svn.gnome.org/viewvc/gdip-pixbuf-loader?rev=43&view=rev
Log:
2008-03-03 Dominic Lachowicz <domlachowicz gmail com>
* src/io-gdip-png.c: Support setting the PNG's compression level, just like
GdkPixbuf's built-in PNG encoder. Still need to support tEXt chunks.
Modified:
trunk/ChangeLog
trunk/src/io-gdip-jpeg.c
trunk/src/io-gdip-png.c
Modified: trunk/src/io-gdip-jpeg.c
==============================================================================
--- trunk/src/io-gdip-jpeg.c (original)
+++ trunk/src/io-gdip-jpeg.c Mon Mar 3 23:22:41 2008
@@ -35,8 +35,7 @@
GError **error)
{
EncoderParameters encoder_params;
- ULONG quality = 75; /* default; must be between 0 and 100 */
- gboolean status;
+ LONG quality = 75; /* default; must be between 0 and 100 */
if (keys && *keys) {
gchar **kiter = keys;
@@ -86,9 +85,7 @@
encoder_params.Parameter[0].NumberOfValues = 1;
encoder_params.Parameter[0].Value = &quality;
- status = io_gdip_save_pixbuf (pixbuf, L"image/jpeg", &encoder_params, save_func, user_data, error);
-
- return status;
+ return io_gdip_save_pixbuf (pixbuf, L"image/jpeg", &encoder_params, save_func, user_data, error);
}
static gboolean
Modified: trunk/src/io-gdip-png.c
==============================================================================
--- trunk/src/io-gdip-png.c (original)
+++ trunk/src/io-gdip-png.c Mon Mar 3 23:22:41 2008
@@ -21,8 +21,11 @@
* Boston, MA 02111-1307, USA.
*/
+#define INITGUID
#include "io-gdip-utils.h"
+DEFINE_GUID(EncoderCompression, 0xe09d739d,0xccd4,0x44ee,0x8e,0xba,0x3f,0xbf,0x8b,0xe4,0xfc,0x58);
+
static gboolean
gdk_pixbuf__gdip_image_save_PNG_to_callback (GdkPixbufSaveFunc save_func,
gpointer user_data,
@@ -31,15 +34,57 @@
gchar **values,
GError **error)
{
- /* TODO: support exif data and the like */
- EncoderParameters *encoder_params = NULL;
- gboolean status;
-
- status = io_gdip_save_pixbuf (pixbuf, L"image/png", encoder_params, save_func, user_data, error);
+ EncoderParameters encoder_params;
+ LONG compression = 5;
- g_free (encoder_params);
+ 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 status;
+ return io_gdip_save_pixbuf (pixbuf, L"image/png", &encoder_params, save_func, user_data, error);
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]