| 115 *pixels /= 2; |
115 *pixels /= 2; |
| 116 pixels += pad; |
116 pixels += pad; |
| 117 } |
117 } |
| 118 } |
118 } |
| 119 |
119 |
| 120 static gboolean |
|
| 121 scrncap_pixbuf_to_image_cb(const gchar *buf, gsize count, GError **error, |
|
| 122 gpointer data) |
|
| 123 { |
|
| 124 PurpleImage *image = *(PurpleImage **)data; |
|
| 125 |
|
| 126 image = purple_image_new_from_data(buf, count); |
|
| 127 |
|
| 128 return TRUE; |
|
| 129 } |
|
| 130 |
|
| 131 static PurpleImage * |
120 static PurpleImage * |
| 132 scrncap_pixbuf_to_image(GdkPixbuf *pixbuf) |
121 scrncap_pixbuf_to_image(GdkPixbuf *pixbuf) |
| 133 { |
122 { |
| 134 PurpleImage *image = NULL; |
123 PurpleImage *image = NULL; |
| |
124 gchar *buffer; |
| |
125 gsize count; |
| 135 GError *error = NULL; |
126 GError *error = NULL; |
| 136 |
127 |
| 137 gdk_pixbuf_save_to_callback(pixbuf, scrncap_pixbuf_to_image_cb, &image, |
128 if (!gdk_pixbuf_save_to_buffer(pixbuf, &buffer, &count, "png", |
| 138 "png", &error, NULL); |
129 &error, NULL)) { |
| 139 |
|
| 140 if (error != NULL) { |
|
| 141 purple_debug_error("screencap", "Failed saving an image: %s", |
130 purple_debug_error("screencap", "Failed saving an image: %s", |
| 142 error->message); |
131 error->message); |
| 143 g_error_free(error); |
132 g_error_free(error); |
| 144 g_object_unref(image); |
|
| 145 return NULL; |
133 return NULL; |
| 146 } |
134 } |
| |
135 |
| |
136 image = purple_image_new_take_data((guint8 *)buffer, count); |
| 147 |
137 |
| 148 if (purple_image_get_extension(image) == NULL) { |
138 if (purple_image_get_extension(image) == NULL) { |
| 149 purple_debug_error("screencap", "Invalid image format"); |
139 purple_debug_error("screencap", "Invalid image format"); |
| 150 g_object_unref(image); |
140 g_object_unref(image); |
| 151 return NULL; |
141 return NULL; |