diff options
Diffstat (limited to 'test/test-eel-pixbuf-scale.c')
-rw-r--r-- | test/test-eel-pixbuf-scale.c | 83 |
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; +} |