blur_pixelated_screen.c (1924B)
1 #include <Imlib2.h> 2 3 Imlib_Image image; 4 5 void 6 render_lock_image(Display *dpy, struct lock *lock, Imlib_Image image) 7 { 8 if (image) { 9 lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen), DefaultDepth(dpy, lock->screen)); 10 imlib_context_set_image(image); 11 imlib_context_set_display(dpy); 12 imlib_context_set_visual(DefaultVisual(dpy, lock->screen)); 13 imlib_context_set_colormap(DefaultColormap(dpy, lock->screen)); 14 imlib_context_set_drawable(lock->bgmap); 15 imlib_render_image_on_drawable(0, 0); 16 imlib_free_image(); 17 } 18 } 19 20 void 21 create_lock_image(Display *dpy) 22 { 23 /* Create screenshot Image */ 24 Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy)); 25 image = imlib_create_image(scr->width,scr->height); 26 imlib_context_set_image(image); 27 imlib_context_set_display(dpy); 28 imlib_context_set_visual(DefaultVisual(dpy,0)); 29 imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr))); 30 imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1); 31 32 #ifdef BLUR 33 /* Blur function */ 34 imlib_image_blur(blurRadius); 35 #endif // BLUR 36 37 #ifdef PIXELATION 38 /* Pixelation */ 39 int width = scr->width; 40 int height = scr->height; 41 42 for (int y = 0; y < height; y += pixelSize) { 43 for (int x = 0; x < width; x += pixelSize) { 44 int red = 0; 45 int green = 0; 46 int blue = 0; 47 48 Imlib_Color pixel; 49 Imlib_Color* pp; 50 pp = &pixel; 51 for (int j = 0; j < pixelSize && j < height; j++) { 52 for (int i = 0; i < pixelSize && i < width; i++) { 53 imlib_image_query_pixel(x + i, y + j, pp); 54 red += pixel.red; 55 green += pixel.green; 56 blue += pixel.blue; 57 } 58 } 59 red /= (pixelSize * pixelSize); 60 green /= (pixelSize * pixelSize); 61 blue /= (pixelSize * pixelSize); 62 imlib_context_set_color(red, green, blue, pixel.alpha); 63 imlib_image_fill_rectangle(x, y, pixelSize, pixelSize); 64 red = 0; 65 green = 0; 66 blue = 0; 67 } 68 } 69 #endif 70 }