int image_apply_modifier_imlib2(struct R_image *image, int which, double gamma, double brightness, double contrast) { Imlib_Image img; Imlib_Color_Modifier colormod; if (image == NULL || which < 0 || which > IMAGE_COLOR_MODIFIERS - 1) { return -1; } img = image->im2img; if (img) { imlib_context_set_image(img); colormod = image->im2colormods[which]; if (colormod == NULL) { colormod = imlib_create_color_modifier(); if (colormod == NULL) { return -1; } } imlib_context_set_color_modifier(colormod); if (gamma >= 0.0) { imlib_modify_color_modifier_gamma(gamma); } else { imlib_modify_color_modifier_gamma(IMLIB2_NORMAL_MODIFIER); } if (brightness >= 0.0) { imlib_modify_color_modifier_brightness(brightness); } else { imlib_modify_color_modifier_brightness(IMLIB2_NORMAL_MODIFIER); } if (contrast >= 0.0) { imlib_modify_color_modifier_contrast(contrast); } else { imlib_modify_color_modifier_contrast(IMLIB2_NORMAL_MODIFIER); } imlib_apply_color_modifier(); } return 0; }
static Imlib_Color_Modifier create_modifier(MainWin *mw, dlist *config, const char *item, const char *d_bright, const char *d_tint, const char *d_opacity) { const char *tmp; XColor exact_color, screen_color; int i, alpha_v; DATA8 red[256], green[256], blue[256], alpha[256]; Imlib_Color_Modifier modifier = imlib_create_color_modifier(); imlib_context_set_color_modifier(modifier); tmp = config_get(config, item, "brightness", d_bright); imlib_modify_color_modifier_brightness(strtod(tmp, NULL)); imlib_get_color_modifier_tables(red, green, blue, alpha); tmp = config_get(config, item, "tint", d_tint); if(XLookupColor(mw->dpy, mw->colormap, tmp, &exact_color, &screen_color) != 0) { double red_f = (double)exact_color.red / 65536.0, green_f = (double)exact_color.green / 65536.0, blue_f = (double)exact_color.blue / 65536.0; for(i = 0; i < 256; i++) { red[i] = (double)red[i] * red_f; green[i] = (double)green[i] * green_f; blue[i] = (double)blue[i] * blue_f; } } else fprintf(stderr, "WARNING: Couldn't look up tint color'%s'.\n", tmp); tmp = config_get(config, item, "opacity", d_opacity); alpha_v = strtol(tmp, 0, 10); if(alpha_v != 255) { for(i = 0; i < 256; i++) alpha[i] = alpha_v; } imlib_set_color_modifier_tables(red, green, blue, alpha); imlib_context_set_color_modifier(0); return modifier; }
static void setup_imlib_color_modifier(qiv_color_modifier q) { if (q.gamma == DEFAULT_GAMMA && q.brightness == DEFAULT_BRIGHTNESS && q.contrast == DEFAULT_CONTRAST) { if (imlib_context_get_color_modifier()) imlib_free_color_modifier(); return; } if (imlib_context_get_color_modifier()) imlib_reset_color_modifier(); else imlib_context_set_color_modifier(imlib_create_color_modifier()); imlib_modify_color_modifier_gamma(q.gamma / 256.0); imlib_modify_color_modifier_brightness((q.brightness - 256) / 256.0); imlib_modify_color_modifier_contrast(q.contrast / 256.0); }
void window_fade_imlib2(Rwindow_t *window, struct R_image *image, int usecs, int mode) { double value, lastvalue; struct R_image *scaledimage; Imlib_Color_Modifier colormod; Pixmap pixmap; Pixmap mask; struct timeval start, stop; int usedtime; XWindowAttributes attributes; if (window == NULL || image == NULL) { return; } if (mode == WINDOW_FADE_IN) { value = 0.0; } else { value = 1.0; } lastvalue = -1.0; usedtime = 0; memset(&attributes, 0, sizeof(attributes)); XGetWindowAttributes(window->app->display, window->win, &attributes); scaledimage = image_clone_imlib2(window->win, image, attributes.width, attributes.height); if (scaledimage == NULL) { return; } colormod = imlib_create_color_modifier(); if (colormod == NULL) { image_destroy_imlib2(scaledimage); return; } imlib_context_set_drawable(window->win); imlib_context_set_image(scaledimage->im2img); imlib_context_set_color_modifier(colormod); imlib_modify_color_modifier_gamma(1.0); imlib_modify_color_modifier_contrast(1.0); gettimeofday(&start, NULL); while (usedtime < usecs) { if (value != lastvalue) { imlib_modify_color_modifier_brightness(value); imlib_context_set_mask(0); imlib_render_pixmaps_for_whole_image(&pixmap, &mask); XSetWindowBackgroundPixmap(window->app->display, window->win, pixmap); XClearWindow(window->app->display, window->win); XFlush(window->app->display); imlib_free_pixmap_and_mask(pixmap); lastvalue = value; } gettimeofday(&stop, NULL); usedtime = TIMEVAL_CMP_USEC(&start, &stop); value = IMAGE_NORMAL_MODIFIER * (usedtime / (double)usecs); if (mode == WINDOW_FADE_OUT) { value = IMAGE_NORMAL_MODIFIER - value; } } if (mode == WINDOW_FADE_IN && lastvalue != IMAGE_NORMAL_MODIFIER) { imlib_modify_color_modifier_brightness(IMAGE_NORMAL_MODIFIER); imlib_context_set_mask(0); imlib_render_pixmaps_for_whole_image(&pixmap, &mask); XSetWindowBackgroundPixmap(window->app->display, window->win, pixmap); XClearWindow(window->app->display, window->win); XFlush(window->app->display); imlib_free_pixmap_and_mask(pixmap); } else if (lastvalue != 0.0) { imlib_modify_color_modifier_brightness(0.0); imlib_context_set_mask(0); imlib_render_pixmaps_for_whole_image(&pixmap, &mask); XSetWindowBackgroundPixmap(window->app->display, window->win, pixmap); XClearWindow(window->app->display, window->win); XFlush(window->app->display); imlib_free_pixmap_and_mask(pixmap); } image_destroy_imlib2(scaledimage); return; }
int main (int argc, char **argv) { Visual *vis; Colormap cm; Display *_display; Imlib_Context context; Imlib_Image image; Pixmap pixmap; Imlib_Color_Modifier modifier = NULL; _display = XOpenDisplay (NULL); int width, height, depth, i, alpha; char str1[40]; char str2[40]; char str3[40]; char str4[40]; char str5[40]; int ck0; int w, h; w = 0; h = 0; char strA1[30] = "hwe"; char strA2[30] = "hwer"; const char jpg[15] = "jpg"; //1 const char png[15] = "png"; //2 char *A1; char *A2; strcpy(strA1, argv[argc-1]); strcpy(strA2, strA1); A1 = strstr(strA1, jpg); A2 = strstr(strA2, png); //check to be sure image format is written right or abort checkForNull(A1, A2); for (screen = 0; screen < ScreenCount (_display); screen++) { display = XOpenDisplay (NULL); context = imlib_context_new (); imlib_context_push (context); imlib_context_set_display (display); vis = DefaultVisual (display, screen); cm = DefaultColormap (display, screen); width = DisplayWidth (display, screen); height = DisplayHeight (display, screen); depth = DefaultDepth (display, screen); pixmap = XCreatePixmap (display, RootWindow (display, screen), width, height, depth); imlib_context_set_visual (vis); imlib_context_set_colormap (cm); imlib_context_set_drawable (pixmap); imlib_context_set_color_range (imlib_create_color_range ()); image = imlib_create_image (width, height); imlib_context_set_image (image); printf("1\n"); imlib_context_set_color (0, 0, 0, 255); imlib_image_fill_rectangle (0, 0, width, height); imlib_context_set_dither (1); imlib_context_set_blend (1); printf("2\n"); alpha = 255; for (i = 1; i < argc; i++) { if (modifier != NULL) { imlib_apply_color_modifier (); imlib_free_color_modifier (); } modifier = imlib_create_color_modifier (); imlib_context_set_color_modifier (modifier); if (strcmp (argv[i], "-alpha") == 0) { if ((++i) >= argc) { fprintf (stderr, "Missing alpha\n"); continue; } if (sscanf (argv[i], "%i", &alpha) == 0) { fprintf (stderr, "Bad alpha (%s)\n", argv[i]); continue; } } else if (strcmp (argv[i], "-solid") == 0) { Color c; if ((++i) >= argc) { fprintf (stderr, "Missing color\n"); continue; } if (parse_color (argv[i], &c, alpha) == 1) { fprintf (stderr, "Bad color (%s)\n", argv[i]); continue; } imlib_context_set_color (c.r, c.g, c.b, c.a); imlib_image_fill_rectangle (0, 0, width, height); } else if (strcmp (argv[i], "-clear") == 0) { imlib_free_color_range (); imlib_context_set_color_range (imlib_create_color_range ()); } else if (strcmp (argv[i], "-add") == 0) { Color c; if ((++i) >= argc) { fprintf (stderr, "Missing color\n"); continue; } if (parse_color (argv[i], &c, alpha) == 1) { fprintf (stderr, "Bad color (%s)\n", argv[i - 1]); continue; } imlib_context_set_color (c.r, c.g, c.b, c.a); imlib_add_color_to_color_range (1); } else if (strcmp (argv[i], "-addd") == 0) { Color c; int distance; if ((++i) >= argc) { fprintf (stderr, "Missing color\n"); continue; } if ((++i) >= argc) { fprintf (stderr, "Missing distance\n"); continue; } if (parse_color (argv[i - 1], &c, alpha) == 1) { fprintf (stderr, "Bad color (%s)\n", argv[i - 1]); continue; } if (sscanf (argv[i], "%i", &distance) == 1) { fprintf (stderr, "Bad distance (%s)\n", argv[i]); continue; } imlib_context_set_color (c.r, c.g, c.b, c.a); imlib_add_color_to_color_range (distance); } else if (strcmp (argv[i], "-gradient") == 0) { int angle; if ((++i) >= argc) { fprintf (stderr, "Missing angle\n"); continue; } if (sscanf (argv[i], "%i", &angle) == 1) { fprintf (stderr, "Bad angle (%s)\n", argv[i]); continue; } imlib_image_fill_color_range_rectangle (0, 0, width, height, angle); } else if (strcmp (argv[i], "-fill") == 0) { if ((++i) >= argc) { fprintf (stderr, "Missing image\n"); continue; } if ( load_Mod_image(Fill, argv[i], width, height, alpha, image, ck0) == 1) { fprintf (stderr, "Bad image (%s)\n", argv[i]); continue; } } else if (strcmp (argv[i], "-dia") == 0) { if((++i) >= argc) { fprintf(stderr, "missing Dia, and Image\n"); continue; } strcpy (str1, argv[i]); strcpy (str2, str1); if ( findX(str1, &w, &h) == 1 ) { fprintf(stderr, " Bad Format\n"); continue; } else if (findX(str2, &w, &h) == 0 && ((++i) >= argc)) { fprintf(stderr, "Missing Image\n"); continue; } else { //if format is correct then assign a number for //load_Mod_Image to check ck0 = -2; w = w; h = h; } if( load_Mod_image(Dia, argv[i], w, h, alpha, image, ck0) == 1 ) { fprintf(stderr, "Bad Image or Bad Image Dimensions \n"); } } else if (strcmp (argv[i], "-tile") == 0) { if ((++i) >= argc) { fprintf(stderr, "format 0 missing \n"); continue; } strcpy (str1, argv[i]); strcpy (str2, str1); strcpy (str3, str2); strcpy (str4, str3); strcpy (str5, str4); if ( findX(str1, &w, &h) == 3 && ((++i) >= argc)) { fprintf(stderr, "missing Image\n"); continue; } //check to see if format is -tile 0 else if (findX(str2, &w, &h) == 3) { ck0 = 3; if( load_Mod_image(Tile, argv[i], width, height, alpha, image, ck0) == 1 ) { fprintf(stderr, "Bad Image or Bad Image Dimensions \n"); continue; } } if (findX(str3, &w, &h) == 1) { fprintf(stderr, "bad format\n"); continue; } if (findX(str4, &w, &h) == 0 && ((++i) >= argc)) { fprintf(stderr, "missing something again\n"); continue; } if (findX (str5, &w, &h) == 0 ) { ck0 = 2; w = w; h = h; } if( load_Mod_image(Tile, argv[i], w, h, alpha, image, ck0) == 1 ) { fprintf(stderr, "Bad Image or Bad Image Dimension\n"); } } else if (strcmp (argv[i], "-center") == 0) { if ((++i) >= argc) { fprintf (stderr, "Missing image\n"); continue; } if (load_Mod_image (Center, argv[i], width, height, alpha, image, ck0) == 1) { fprintf (stderr, "Bad image (%s)\n", argv[i]); continue; } } else if (strcmp (argv[i], "-tint") == 0) { Color c; DATA8 r[256], g[256], b[256], a[256]; int j; if ((++i) >= argc) { fprintf (stderr, "Missing color\n"); continue; } if (parse_color (argv[i], &c, 255) == 1) { fprintf (stderr, "Bad color\n"); continue; } imlib_get_color_modifier_tables (r, g, b, a); for (j = 0; j < 256; j++) { r[j] = (DATA8) (((double) r[j] / 255.0) * (double) c.r); g[j] = (DATA8) (((double) g[j] / 255.0) * (double) c.g); b[j] = (DATA8) (((double) b[j] / 255.0) * (double) c.b); } imlib_set_color_modifier_tables (r, g, b, a); } else if (strcmp (argv[i], "-blur") == 0) { int intval; if ((++i) >= argc) { fprintf (stderr, "Missing value\n"); continue; } if (sscanf (argv[i], "%i", &intval) == 1) { fprintf (stderr, "Bad value (%s)\n", argv[i]); continue; } imlib_image_blur (intval); } else if (strcmp (argv[i], "-sharpen") == 0) { int intval; if ((++i) >= argc) { fprintf (stderr, "Missing value\n"); continue; } if (sscanf (argv[i], "%i", &intval) == 1) { fprintf (stderr, "Bad value (%s)\n", argv[i]); continue; } imlib_image_sharpen (intval); } else if (strcmp (argv[i], "-contrast") == 0) { double dblval; if ((++i) >= argc) { fprintf (stderr, "Missing value\n"); continue; } if (sscanf (argv[i], "%lf", &dblval) == 1) { fprintf (stderr, "Bad value (%s)\n", argv[i]); continue; } imlib_modify_color_modifier_contrast (dblval); } else if (strcmp (argv[i], "-brightness") == 0) { double dblval; if ((++i) >= argc) { fprintf (stderr, "Missing value\n"); continue; } if (sscanf (argv[i], "%lf", &dblval) == 1) { fprintf (stderr, "Bad value (%s)\n", argv[i]); continue; } imlib_modify_color_modifier_brightness (dblval); } else if (strcmp (argv[i], "-gamma") == 0) { double dblval; if ((++i) >= argc) { fprintf (stderr, "Missing value\n"); continue; } if (sscanf (argv[i], "%lf", &dblval) == 1) { fprintf (stderr, "Bad value (%s)\n", argv[i]); continue; } imlib_modify_color_modifier_gamma (dblval); } else if (strcmp (argv[i], "-flipv") == 0) { imlib_image_flip_vertical (); } else if (strcmp (argv[i], "-fliph") == 0) { imlib_image_flip_horizontal (); } else if (strcmp (argv[i], "-flipd") == 0) { imlib_image_flip_diagonal (); } else if (strcmp (argv[i], "-write") == 0) { if ((++i) >= argc) { fprintf (stderr, "Missing filename\n"); continue; } imlib_save_image (argv[i]); } else { usage (argv[0]); imlib_free_image (); imlib_free_color_range (); if (modifier != NULL) { imlib_context_set_color_modifier (modifier); imlib_free_color_modifier (); modifier = NULL; } XFreePixmap (display, pixmap); exit (1); } // end else } // end loop off of argc if (modifier != NULL) { imlib_context_set_color_modifier (modifier); imlib_apply_color_modifier (); imlib_free_color_modifier (); modifier = NULL; } imlib_render_image_on_drawable (0, 0); imlib_free_image (); imlib_free_color_range (); if (setRootAtoms (pixmap) == 0) fprintf (stderr, "Couldn't create atoms...\n"); XKillClient (display, AllTemporary); XSetCloseDownMode (display, RetainTemporary); XSetWindowBackgroundPixmap (display, RootWindow (display, screen), pixmap); XClearWindow (display, RootWindow (display, screen)); XFlush (display); XSync (display, False); imlib_context_pop (); imlib_context_free (context); } // end for loop off screen // } // frist if statment at start of main return 0; }