gdip-pixbuf-loader r42 - in trunk: . src
- From: doml svn gnome org
- To: svn-commits-list gnome org
- Subject: gdip-pixbuf-loader r42 - in trunk: . src
- Date: Mon, 3 Mar 2008 23:12:21 +0000 (GMT)
Author: doml
Date: Mon Mar 3 23:12:21 2008
New Revision: 42
URL: http://svn.gnome.org/viewvc/gdip-pixbuf-loader?rev=42&view=rev
Log:
2008-03-03 Dominic Lachowicz <domlachowicz gmail com>
* src/io-gdip-native.h:
* src/io-gdip-jpeg.c: Support setting the JPEG's quality, just like GdkPixbuf's
built-in JPEG encoder
Modified:
trunk/ChangeLog
trunk/src/io-gdip-jpeg.c
trunk/src/io-gdip-native.h
Modified: trunk/src/io-gdip-jpeg.c
==============================================================================
--- trunk/src/io-gdip-jpeg.c (original)
+++ trunk/src/io-gdip-jpeg.c Mon Mar 3 23:12:21 2008
@@ -21,8 +21,11 @@
* Boston, MA 02111-1307, USA.
*/
+#define INITGUID
#include "io-gdip-utils.h"
+DEFINE_GUID(EncoderQuality, 0x1d5be4b5,0xfa4a,0x452d,0x9c,0xdd,0x5d,0xb3,0x51,0x05,0xe7,0xeb);
+
static gboolean
gdk_pixbuf__gdip_image_save_JPEG_to_callback (GdkPixbufSaveFunc save_func,
gpointer user_data,
@@ -31,12 +34,59 @@
gchar **values,
GError **error)
{
- EncoderParameters *encoder_params = NULL;
+ EncoderParameters encoder_params;
+ ULONG quality = 75; /* default; must be between 0 and 100 */
gboolean status;
- status = io_gdip_save_pixbuf (pixbuf, L"image/jpeg", encoder_params, save_func, user_data, error);
-
- g_free (encoder_params);
+ 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;
+
+ status = io_gdip_save_pixbuf (pixbuf, L"image/jpeg", &encoder_params, save_func, user_data, error);
return status;
}
Modified: trunk/src/io-gdip-native.h
==============================================================================
--- trunk/src/io-gdip-native.h (original)
+++ trunk/src/io-gdip-native.h Mon Mar 3 23:12:21 2008
@@ -33,6 +33,18 @@
typedef gulong ARGB;
typedef gint PixelFormat;
+typedef enum {
+ EncoderParameterValueTypeByte = 1,
+ EncoderParameterValueTypeASCII = 2,
+ EncoderParameterValueTypeShort = 3,
+ EncoderParameterValueTypeLong = 4,
+ EncoderParameterValueTypeRational = 5,
+ EncoderParameterValueTypeLongRange = 6,
+ EncoderParameterValueTypeUndefined = 7,
+ EncoderParameterValueTypeRationalRange = 8,
+ EncoderParameterValueTypePointer = 9
+} EncoderParameterValueType;
+
#define PixelFormatIndexed 0x00010000
#define PixelFormatGDI 0x00020000
#define PixelFormatAlpha 0x00040000
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]