/* draw a white (background) border around image, overwriting image contents * beneath border*/ Imlib_Image white_border(Imlib_Image *source_image, int bdwidth) { Imlib_Image new_image; /* construct filtered image here */ Imlib_Image current_image; /* save image pointer */ int height, width; /* image dimensions */ int x,y; /* coordinates of upper left corner of rectangles */ /* save pointer to current image */ current_image = imlib_context_get_image(); /* create a new image */ imlib_context_set_image(*source_image); height = imlib_image_get_height(); width = imlib_image_get_width(); new_image = imlib_clone_image(); /* assure border width has a legal value */ if(bdwidth > width/2) bdwidth = width/2; if(bdwidth > height/2) bdwidth = height/2; /* draw white (background) rectangle around new image */ for(x=0, y=0; x<bdwidth; x++, y++) { imlib_context_set_image(new_image); ssocr_set_color(BG); imlib_image_draw_rectangle(x, y, width-2*x, height-2*y); } /* restore image from before function call */ imlib_context_set_image(current_image); /* return filtered image */ return new_image; }
static inline PyObject * ImageObject_draw_rectangle(PyObject* self, PyObject *args, PyObject *kwargs) { int x, y, w, h; int r=-1, g, b, alpha, fill=0; static char *keywords[] = {"x", "y", "w", "h", "color", "fill", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iiii|(iiii)i:draw_rectangle", keywords, &x, &y, &w, &h, &r, &g, &b, &alpha, &fill)){ return NULL; } imlib_context_set_image(((ImageObject *)self)->image); if(r >= 0){ //set color imlib_context_set_color(r, g, b, alpha); } DEBUG("fill %d", fill); if(fill){ imlib_image_fill_rectangle(x, y, w, h); }else{ imlib_image_draw_rectangle(x, y, w, h); } Py_RETURN_NONE; }
void gib_imlib_image_draw_rectangle(Imlib_Image im, int x, int y, int w, int h, int r, int g, int b, int a) { imlib_context_set_image(im); imlib_context_set_color(r, g, b, a); imlib_image_draw_rectangle(x, y, w, h); }
int main(int argc, char **argv) { int w, h, tw, th; Imlib_Image im_bg = NULL; XEvent ev; KeySym keysym; static char kbuf[20]; Imlib_Font font; Imlib_Color_Range range; const char *display_name = getenv("DISPLAY"); /** * First tests to determine which rendering task to perform */ if (display_name == NULL) display_name = ":0"; disp = XOpenDisplay(display_name); if (disp == NULL) { fprintf(stderr, "Can't open display %s\n", display_name); return 1; } vis = DefaultVisual(disp, DefaultScreen(disp)); depth = DefaultDepth(disp, DefaultScreen(disp)); cm = DefaultColormap(disp, DefaultScreen(disp)); win = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0, 0, 100, 100, 0, 0, 0); XSelectInput(disp, win, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | PointerMotionMask | ExposureMask | KeyPressMask); XMapWindow(disp, win); /** * Start rendering */ imlib_set_font_cache_size(512 * 1024); imlib_add_path_to_font_path(PACKAGE_DATA_DIR"/data/fonts"); imlib_context_set_display(disp); imlib_context_set_visual(vis); imlib_context_set_colormap(cm); imlib_context_set_drawable(win); imlib_context_set_blend(0); imlib_context_set_color_modifier(NULL); imlib_context_set_blend(0); im_bg = imlib_create_image(600, 400); imlib_context_set_image(im_bg); w = imlib_image_get_width(); h = imlib_image_get_height(); imlib_context_set_color(128, 128, 255, 255); imlib_image_fill_rectangle(0, 0, w, h); XResizeWindow(disp, win, w, h); XSync(disp, False); while (1) { do { XNextEvent(disp, &ev); switch (ev.type) { case ButtonRelease: exit(0); break; case KeyPress: XLookupString(&ev.xkey, (char *)kbuf, sizeof(kbuf), &keysym, NULL); switch (*kbuf) { case 'q': exit(0); default: break; } break; default: break; } } while (XPending(disp)); imlib_context_set_image(im_bg); imlib_context_set_color(128, 128, 255, 255); imlib_image_fill_rectangle(0, 0, w, h); imlib_context_set_color(0, 0, 0, 255); imlib_image_draw_rectangle(20, 20, 560, 140); imlib_image_draw_rectangle(20, 220, 560, 140); font = imlib_load_font("notepad/15"); if (font) { char text[4096]; imlib_context_set_font(font); imlib_context_set_color(0, 0, 0, 255); sprintf(text, "RGBA range, 2 points, from red to magenta"); imlib_get_text_size(text, &tw, &th); imlib_text_draw(300 - tw / 2, 180 - th / 2, text); sprintf(text, "HSVA range, 2 points, from red to magenta"); imlib_get_text_size(text, &tw, &th); imlib_text_draw(300 - tw / 2, 380 - th / 2, text); imlib_free_font(); } /* Draw rectangle w/ RGBA gradient */ range = imlib_create_color_range(); imlib_context_set_color_range(range); imlib_context_set_color(255, 0, 0, 255); imlib_add_color_to_color_range(0); imlib_context_set_color(255, 0, 255, 255); imlib_add_color_to_color_range(20); imlib_image_fill_color_range_rectangle(21, 21, 558, 138, -90.0); imlib_free_color_range(); /* Draw rectangle w/ HSVA gradient */ range = imlib_create_color_range(); imlib_context_set_color_range(range); imlib_context_set_color_hsva(0, 1, 1, 255); imlib_add_color_to_color_range(0); imlib_context_set_color_hsva(300, 1, 1, 255); imlib_add_color_to_color_range(20); imlib_image_fill_hsva_color_range_rectangle(21, 221, 558, 138, -90.0); imlib_free_color_range(); imlib_render_image_on_drawable(0, 0); } return 0; }
/* set pixels with (brightness) value lower than threshold that have more than * mask pixels around it set (including the examined pixel itself) to black * (foreground), set pixels with (brightness) value lower than threshold that * less or equal pixels around it set to white (background) */ Imlib_Image keep_pixels_filter(Imlib_Image *source_image, double thresh, luminance_t lt, int mask) { Imlib_Image new_image; /* construct filtered image here */ Imlib_Image current_image; /* save image pointer */ int height, width; /* image dimensions */ int x,y,i,j; /* iteration variables */ int set_pixel; /* should pixel be set or not? */ Imlib_Color color; int lum; /* luminance value of pixel */ /* save pointer to current image */ current_image = imlib_context_get_image(); /* create a new image */ imlib_context_set_image(*source_image); height = imlib_image_get_height(); width = imlib_image_get_width(); new_image = imlib_clone_image(); /* draw white (background) rectangle to clear new image */ imlib_context_set_image(new_image); ssocr_set_color(BG); imlib_image_draw_rectangle(0, 0, width, height); imlib_context_set_image(*source_image); /* check for every pixel if it should be set in filtered image */ for(x=0; x<width; x++) { for(y=0; y<height; y++) { set_pixel=0; imlib_image_query_pixel(x, y, &color); lum = get_lum(&color, lt); if(is_pixel_set(lum, thresh)) { /* only test neighbors of set pixels */ for(i=x-1; i<=x+1; i++) { for(j=y-1; j<=y+1; j++) { if(i>=0 && i<width && j>=0 && j<height) { /* i,j inside image? */ imlib_image_query_pixel(i, j, &color); lum = get_lum(&color, lt); if(is_pixel_set(lum, thresh)) { set_pixel++; } } } } } /* set pixel if at least mask pixels around it are set */ /* mask = 1 keeps all pixels */ if(set_pixel > mask) { draw_fg_pixel(new_image, x, y); } else { draw_bg_pixel(new_image, x, y); } } } /* restore image from before function call */ imlib_context_set_image(current_image); /* return filtered image */ return new_image; }