mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-03 19:03:24 +00:00
Handle availability of MagickMergeImageLayers and MagickExportImagePixels
* configure.in: Check for MagickMergeImageLayers. * src/image.c (imagemagick_load_image): Use MagickFlattenImage if MagickMergeImageLayers is undefined. Use pixel pusher loop if MagickExportImagePixels is undefined. Fixes: debbugs:11678
This commit is contained in:
parent
47fc1d6ba8
commit
0e25d3345f
4 changed files with 59 additions and 53 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2012-06-12 Chong Yidong <cyd@gnu.org>
|
||||||
|
|
||||||
|
* configure.in: Check for MagickMergeImageLayers (Bug#11678).
|
||||||
|
|
||||||
2012-06-11 Glenn Morris <rgm@gnu.org>
|
2012-06-11 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
* configure.in (SYSTEM_TYPE): New AC_DEFINE.
|
* configure.in (SYSTEM_TYPE): New AC_DEFINE.
|
||||||
|
|
|
@ -1855,6 +1855,7 @@ if test "${HAVE_X11}" = "yes"; then
|
||||||
CFLAGS="$CFLAGS $IMAGEMAGICK_CFLAGS"
|
CFLAGS="$CFLAGS $IMAGEMAGICK_CFLAGS"
|
||||||
LIBS="$IMAGEMAGICK_LIBS $LIBS"
|
LIBS="$IMAGEMAGICK_LIBS $LIBS"
|
||||||
AC_CHECK_FUNCS(MagickExportImagePixels)
|
AC_CHECK_FUNCS(MagickExportImagePixels)
|
||||||
|
AC_CHECK_FUNCS(MagickMergeImageLayers)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2012-06-12 Chong Yidong <cyd@gnu.org>
|
||||||
|
|
||||||
|
* image.c (imagemagick_load_image): Use MagickFlattenImage if
|
||||||
|
MagickMergeImageLayers is undefined. Use pixel pusher loop if
|
||||||
|
MagickExportImagePixels is undefined.
|
||||||
|
|
||||||
2012-06-12 Paul Eggert <eggert@cs.ucla.edu>
|
2012-06-12 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
* image.c (imagemagick_load_image): Remove unused label.
|
* image.c (imagemagick_load_image): Remove unused label.
|
||||||
|
|
101
src/image.c
101
src/image.c
|
@ -7783,7 +7783,11 @@ imagemagick_load_image (struct frame *f, struct image *img,
|
||||||
{
|
{
|
||||||
MagickWand *new_wand;
|
MagickWand *new_wand;
|
||||||
MagickSetImageBackgroundColor (image_wand, bg_wand);
|
MagickSetImageBackgroundColor (image_wand, bg_wand);
|
||||||
|
#ifdef HAVE_MAGICKMERGEIMAGELAYERS
|
||||||
new_wand = MagickMergeImageLayers (image_wand, MergeLayer);
|
new_wand = MagickMergeImageLayers (image_wand, MergeLayer);
|
||||||
|
#else
|
||||||
|
new_wand = MagickFlattenImages (image_wand);
|
||||||
|
#endif
|
||||||
DestroyMagickWand (image_wand);
|
DestroyMagickWand (image_wand);
|
||||||
image_wand = new_wand;
|
image_wand = new_wand;
|
||||||
}
|
}
|
||||||
|
@ -7800,7 +7804,50 @@ imagemagick_load_image (struct frame *f, struct image *img,
|
||||||
|
|
||||||
init_color_table ();
|
init_color_table ();
|
||||||
|
|
||||||
if (imagemagick_render_type == 0)
|
#ifdef HAVE_MAGICKEXPORTIMAGEPIXELS
|
||||||
|
if (imagemagick_render_type != 0)
|
||||||
|
{
|
||||||
|
/* Magicexportimage is normally faster than pixelpushing. This
|
||||||
|
method is also well tested. Some aspects of this method are
|
||||||
|
ad-hoc and needs to be more researched. */
|
||||||
|
int imagedepth = 24; /*MagickGetImageDepth(image_wand);*/
|
||||||
|
const char *exportdepth = imagedepth <= 8 ? "I" : "BGRP"; /*"RGBP";*/
|
||||||
|
/* Try to create a x pixmap to hold the imagemagick pixmap. */
|
||||||
|
if (!x_create_x_image_and_pixmap (f, width, height, imagedepth,
|
||||||
|
&ximg, &img->pixmap))
|
||||||
|
{
|
||||||
|
#ifdef COLOR_TABLE_SUPPORT
|
||||||
|
free_color_table ();
|
||||||
|
#endif
|
||||||
|
image_error ("Imagemagick X bitmap allocation failure", Qnil, Qnil);
|
||||||
|
goto imagemagick_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Oddly, the below code doesn't seem to work:*/
|
||||||
|
/* switch(ximg->bitmap_unit){ */
|
||||||
|
/* case 8: */
|
||||||
|
/* pixelwidth=CharPixel; */
|
||||||
|
/* break; */
|
||||||
|
/* case 16: */
|
||||||
|
/* pixelwidth=ShortPixel; */
|
||||||
|
/* break; */
|
||||||
|
/* case 32: */
|
||||||
|
/* pixelwidth=LongPixel; */
|
||||||
|
/* break; */
|
||||||
|
/* } */
|
||||||
|
/*
|
||||||
|
Here im just guessing the format of the bitmap.
|
||||||
|
happens to work fine for:
|
||||||
|
- bw djvu images
|
||||||
|
on rgb display.
|
||||||
|
seems about 3 times as fast as pixel pushing(not carefully measured)
|
||||||
|
*/
|
||||||
|
pixelwidth = CharPixel; /*??? TODO figure out*/
|
||||||
|
MagickExportImagePixels (image_wand, 0, 0, width, height,
|
||||||
|
exportdepth, pixelwidth, ximg->data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif /* HAVE_MAGICKEXPORTIMAGEPIXELS */
|
||||||
{
|
{
|
||||||
size_t image_height;
|
size_t image_height;
|
||||||
|
|
||||||
|
@ -7850,58 +7897,6 @@ imagemagick_load_image (struct frame *f, struct image *img,
|
||||||
}
|
}
|
||||||
DestroyPixelIterator (iterator);
|
DestroyPixelIterator (iterator);
|
||||||
}
|
}
|
||||||
else /* imagemagick_render_type != 0 */
|
|
||||||
{
|
|
||||||
/* Magicexportimage is normally faster than pixelpushing. This
|
|
||||||
method is also well tested. Some aspects of this method are
|
|
||||||
ad-hoc and needs to be more researched. */
|
|
||||||
int imagedepth = 24;/*MagickGetImageDepth(image_wand);*/
|
|
||||||
const char *exportdepth = imagedepth <= 8 ? "I" : "BGRP";/*"RGBP";*/
|
|
||||||
/* Try to create a x pixmap to hold the imagemagick pixmap. */
|
|
||||||
if (!x_create_x_image_and_pixmap (f, width, height, imagedepth,
|
|
||||||
&ximg, &img->pixmap))
|
|
||||||
{
|
|
||||||
#ifdef COLOR_TABLE_SUPPORT
|
|
||||||
free_color_table ();
|
|
||||||
#endif
|
|
||||||
image_error ("Imagemagick X bitmap allocation failure", Qnil, Qnil);
|
|
||||||
goto imagemagick_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Oddly, the below code doesn't seem to work:*/
|
|
||||||
/* switch(ximg->bitmap_unit){ */
|
|
||||||
/* case 8: */
|
|
||||||
/* pixelwidth=CharPixel; */
|
|
||||||
/* break; */
|
|
||||||
/* case 16: */
|
|
||||||
/* pixelwidth=ShortPixel; */
|
|
||||||
/* break; */
|
|
||||||
/* case 32: */
|
|
||||||
/* pixelwidth=LongPixel; */
|
|
||||||
/* break; */
|
|
||||||
/* } */
|
|
||||||
/*
|
|
||||||
Here im just guessing the format of the bitmap.
|
|
||||||
happens to work fine for:
|
|
||||||
- bw djvu images
|
|
||||||
on rgb display.
|
|
||||||
seems about 3 times as fast as pixel pushing(not carefully measured)
|
|
||||||
*/
|
|
||||||
pixelwidth = CharPixel;/*??? TODO figure out*/
|
|
||||||
#ifdef HAVE_MAGICKEXPORTIMAGEPIXELS
|
|
||||||
MagickExportImagePixels (image_wand,
|
|
||||||
0, 0,
|
|
||||||
width, height,
|
|
||||||
exportdepth,
|
|
||||||
pixelwidth,
|
|
||||||
ximg->data);
|
|
||||||
#else
|
|
||||||
image_error ("You don't have MagickExportImagePixels, upgrade ImageMagick!",
|
|
||||||
Qnil, Qnil);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef COLOR_TABLE_SUPPORT
|
#ifdef COLOR_TABLE_SUPPORT
|
||||||
/* Remember colors allocated for this image. */
|
/* Remember colors allocated for this image. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue