summaryrefslogtreecommitdiff
path: root/test/test-eel-pixbuf-scale.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-eel-pixbuf-scale.c')
-rw-r--r--test/test-eel-pixbuf-scale.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/test-eel-pixbuf-scale.c b/test/test-eel-pixbuf-scale.c
new file mode 100644
index 00000000..485c922f
--- /dev/null
+++ b/test/test-eel-pixbuf-scale.c
@@ -0,0 +1,83 @@
+#include "test.h"
+
+#include <eel/eel-gdk-pixbuf-extensions.h>
+
+#include <sys/time.h>
+
+
+#define N_SCALES 100
+
+#define DEST_WIDTH 32
+#define DEST_HEIGHT 32
+
+int
+main (int argc, char* argv[])
+{
+ GdkPixbuf *pixbuf, *scaled;
+ GError *error;
+ struct timeval t1, t2;
+ int i;
+
+ test_init (&argc, &argv);
+
+ if (argc != 2) {
+ printf ("Usage: test <image filename>\n");
+ exit (1);
+ }
+
+ error = NULL;
+ pixbuf = gdk_pixbuf_new_from_file (argv[1], &error);
+
+ if (pixbuf == NULL) {
+ printf ("error loading pixbuf: %s\n", error->message);
+ exit (1);
+ }
+
+ printf ("scale factors: %f, %f\n",
+ (double)gdk_pixbuf_get_width(pixbuf)/DEST_WIDTH,
+ (double)gdk_pixbuf_get_height(pixbuf)/DEST_HEIGHT);
+
+ gettimeofday(&t1, NULL);
+ for (i = 0; i < N_SCALES; i++) {
+ scaled = eel_gdk_pixbuf_scale_down (pixbuf, DEST_WIDTH, DEST_HEIGHT);
+ g_object_unref (scaled);
+ }
+ gettimeofday(&t2, NULL);
+ g_print ("Time for eel_gdk_pixbuf_scale_down: %ld msecs\n",
+ (t2.tv_sec - t1.tv_sec) * 1000 + (t2.tv_usec - t1.tv_usec) / 1000);
+
+
+
+ gettimeofday(&t1, NULL);
+ for (i = 0; i < N_SCALES; i++) {
+ scaled = gdk_pixbuf_scale_simple (pixbuf, DEST_WIDTH, DEST_HEIGHT, GDK_INTERP_NEAREST);
+ g_object_unref (scaled);
+ }
+ gettimeofday(&t2, NULL);
+ g_print ("Time for INTERP_NEAREST: %ld msecs\n",
+ (t2.tv_sec - t1.tv_sec) * 1000 + (t2.tv_usec - t1.tv_usec) / 1000);
+
+
+ gettimeofday(&t1, NULL);
+ for (i = 0; i < N_SCALES; i++) {
+ scaled = gdk_pixbuf_scale_simple (pixbuf, DEST_WIDTH, DEST_HEIGHT, GDK_INTERP_BILINEAR);
+ g_object_unref (scaled);
+ }
+ gettimeofday(&t2, NULL);
+ g_print ("Time for INTERP_BILINEAR: %ld msecs\n",
+ (t2.tv_sec - t1.tv_sec) * 1000 + (t2.tv_usec - t1.tv_usec) / 1000);
+
+ scaled = eel_gdk_pixbuf_scale_down (pixbuf, DEST_WIDTH, DEST_HEIGHT);
+ gdk_pixbuf_save (scaled, "eel_scaled.png", "png", NULL, NULL);
+ g_object_unref (scaled);
+
+ scaled = gdk_pixbuf_scale_simple (pixbuf, DEST_WIDTH, DEST_HEIGHT, GDK_INTERP_NEAREST);
+ gdk_pixbuf_save (scaled, "nearest_scaled.png", "png", NULL, NULL);
+ g_object_unref (scaled);
+
+ scaled = gdk_pixbuf_scale_simple (pixbuf, DEST_WIDTH, DEST_HEIGHT, GDK_INTERP_BILINEAR);
+ gdk_pixbuf_save (scaled, "bilinear_scaled.png", "png", NULL, NULL);
+ g_object_unref (scaled);
+
+ return 0;
+}