static void pixelize_pixbuf (GdkPixbuf *pixbuf, gint pixel_size) { gint width, height, rowstride, n_channels; gint block_width, block_height; gint i, j; gint m, n; gint p; guchar *pixels; g_assert (pixel_size > 0); pixels = gdk_pixbuf_get_pixels (pixbuf); width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); rowstride = gdk_pixbuf_get_rowstride (pixbuf); n_channels = gdk_pixbuf_get_n_channels (pixbuf); for (i = 0; i < width; i = i + pixel_size) { for (j = 0; j < height; j = j + pixel_size) { block_width = MIN (width - i, pixel_size); block_height = MIN (height - j, pixel_size); for (m = 0; m < block_width; m ++) { for (n = 0; n < block_height; n++) { if (m == 0 && n == 0) continue; p = 0; *(pixels + (i + m )* n_channels + (j + n) * rowstride + p) = *(pixels + j*rowstride + i*n_channels + p); p++; *(pixels + (i + m )* n_channels + (j + n) * rowstride + p) = *(pixels + j*rowstride + i*n_channels + p); p++; *(pixels + (i + m )* n_channels + (j + n) * rowstride + p) = *(pixels + j*rowstride + i*n_channels + p); } } } } }