Fix semi-transparent artifacts in w3m-img when used with 32-bit color (e.g. urxvt)
imlib_render_image_on_drawable_at_size() tended to leave nasty semi-transparent artifacts in 32-bit mode. Apparently, resizing an image in 32-bit mode affects the alpha channel even if there is no transparency in the image. With this patch, resizing is done in 24-bit mode (or whatever depth the original image has) before converting the image to 32-bit and rendering it on the display. Origin: https://gist.github.com/fmthoma/f76a1b44e00d5ca972bb cf. https://github.com/hut/ranger/issues/86#issuecomment-166027119
This commit is contained in:
committed by
Tatsuya Kinoshita
parent
ffa29b4320
commit
1dd6464be9
@@ -423,6 +423,10 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
|
||||
w = imlib_image_get_width();
|
||||
if (h <= 0)
|
||||
h = imlib_image_get_height();
|
||||
|
||||
im = imlib_create_cropped_scaled_image(0, 0, imlib_image_get_width(), imlib_image_get_height(), w, h);
|
||||
imlib_context_set_image(im);
|
||||
|
||||
img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h,
|
||||
attr.depth);
|
||||
if (!img->pixmap)
|
||||
@@ -433,7 +437,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
|
||||
imlib_context_set_visual(attr.visual);
|
||||
imlib_context_set_colormap(attr.colormap);
|
||||
imlib_context_set_drawable((Drawable) img->pixmap);
|
||||
imlib_render_image_on_drawable_at_size(0, 0, w, h);
|
||||
imlib_render_image_on_drawable(0, 0);
|
||||
imlib_free_image();
|
||||
#elif defined(USE_GDKPIXBUF)
|
||||
max_anim = self->max_anim;
|
||||
|
Reference in New Issue
Block a user