Last active
April 10, 2018 14:40
-
-
Save rzl24ozi/2b6dd502f3e0fa5083fb87c808287370 to your computer and use it in GitHub Desktop.
add imagemagick support to Windows version emacs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- ./lisp/loadup.el.orig 2018-01-09 05:23:57.000000000 +0900 | |
+++ ./lisp/loadup.el 2018-04-10 23:10:38.764782700 +0900 | |
@@ -284,6 +284,7 @@ | |
(load "term/w32-win") | |
(load "disp-table") | |
(when (eq system-type 'windows-nt) | |
+ (load "image") | |
(load "w32-fns") | |
(load "ls-lisp") | |
(load "dos-w32")))) | |
--- ./lisp/term/w32-win.el.orig 2018-01-09 05:23:57.000000000 +0900 | |
+++ ./lisp/term/w32-win.el 2018-04-10 23:10:38.774804800 +0900 | |
@@ -271,6 +271,10 @@ | |
'(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll") | |
'(glib "libglib-2.0-0.dll") | |
'(gobject "libgobject-2.0-0.dll") | |
+ '(magickwand "libMagickWand-6.Q16HDRI-5.dll" "libMagickWand-6.Q16-5.dll" | |
+ "libMagickWand-6.Q16HDRI-2.dll" "libMagickWand-6.Q16-2.dll") | |
+ '(magickcore "libMagickCore-6.Q16HDRI-5.dll" "libMagickCore-6.Q16-5.dll" | |
+ "libMagickCore-6.Q16HDRI-2.dll" "libMagickCore-6.Q16-2.dll") | |
(if (>= libgnutls-version 30400) | |
'(gnutls "libgnutls-30.dll") | |
'(gnutls "libgnutls-28.dll" "libgnutls-26.dll")) | |
--- ./src/image.c.orig 2018-03-13 00:59:18.000000000 +0900 | |
+++ ./src/image.c 2018-04-10 23:10:38.786831200 +0900 | |
@@ -8280,6 +8280,231 @@ | |
MagickPixelPacket *); | |
#endif | |
+#ifdef WINDOWSNT | |
+DEF_DLL_FN (MagickWand *, CloneMagickWand, (const MagickWand *)); | |
+DEF_DLL_FN (MagickWand *, DestroyMagickWand, (MagickWand *)); | |
+DEF_DLL_FN (MagickWand *, DestroyPixelIterator, (PixelIterator *)); | |
+DEF_DLL_FN (PixelWand *, DestroyPixelWand, (PixelWand *)); | |
+#ifdef HAVE_MAGICKAUTOORIENTIMAGE | |
+DEF_DLL_FN (MagickBooleanType, MagickAutoOrientImage, (MagickWand *)); | |
+#endif | |
+DEF_DLL_FN (MagickBooleanType, MagickCropImage, (MagickWand *, const size_t, const size_t, const ssize_t, const ssize_t)); | |
+#ifdef HAVE_MAGICKEXPORTIMAGEPIXELS | |
+DEF_DLL_FN (MagickBooleanType, MagickExportImagePixels, (MagickWand *, const ssize_t, const ssize_t, const size_t, const size_t, const char *, const StorageType, void *)); | |
+#endif | |
+DEF_DLL_FN (char *, MagickGetException, (const MagickWand *, ExceptionType *)); | |
+DEF_DLL_FN (MagickWand *, MagickGetImage, (MagickWand *)); | |
+DEF_DLL_FN (DisposeType, MagickGetImageDelay, (MagickWand *)); | |
+DEF_DLL_FN (DisposeType, MagickGetImageDispose, (MagickWand *)); | |
+DEF_DLL_FN (size_t, MagickGetImageHeight, (MagickWand *)); | |
+DEF_DLL_FN (MagickBooleanType, MagickGetImagePage, (MagickWand *, size_t *, size_t *, ssize_t *, ssize_t *)); | |
+DEF_DLL_FN (char *, MagickGetImageSignature, (MagickWand *)); | |
+DEF_DLL_FN (size_t, MagickGetImageWidth, (MagickWand *)); | |
+DEF_DLL_FN (size_t, MagickGetNumberImages, (MagickWand *)); | |
+#ifdef HAVE_MAGICKMERGEIMAGELAYERS | |
+DEF_DLL_FN (MagickWand *, MagickMergeImageLayers, (MagickWand *, const ImageLayerMethod)); | |
+#else | |
+DEF_DLL_FN (MagickWand *, MagickFlattenImages, (MagickWand *)); | |
+#endif | |
+DEF_DLL_FN (MagickBooleanType, MagickReadImage, (MagickWand *, const char *)); | |
+DEF_DLL_FN (MagickBooleanType, MagickReadImageBlob, (MagickWand *, const void *, const size_t)); | |
+DEF_DLL_FN (void *, MagickRelinquishMemory, (void *)); | |
+DEF_DLL_FN (MagickBooleanType, MagickRotateImage, (MagickWand *, const PixelWand *, const double)); | |
+DEF_DLL_FN (MagickBooleanType, MagickScaleImage, (MagickWand *, const size_t, const size_t)); | |
+DEF_DLL_FN (MagickBooleanType, MagickSetDepth, (MagickWand *, const size_t)); | |
+DEF_DLL_FN (MagickBooleanType, MagickSetFilename, (MagickWand *, const char *)); | |
+DEF_DLL_FN (MagickBooleanType, MagickSetImageBackgroundColor, (MagickWand *, const PixelWand *)); | |
+DEF_DLL_FN (MagickBooleanType, MagickSetIteratorIndex, (MagickWand *, const ssize_t)); | |
+DEF_DLL_FN (MagickBooleanType, MagickSetSize, (MagickWand *, const size_t, const size_t)); | |
+DEF_DLL_FN (void, MagickWandGenesis, (void)); | |
+DEF_DLL_FN (void, MagickWandTerminus, (void)); | |
+DEF_DLL_FN (MagickWand *, NewMagickWand, (void)); | |
+DEF_DLL_FN (PixelIterator *, NewPixelIterator, (MagickWand *)); | |
+DEF_DLL_FN (PixelWand *, NewPixelWand, (void)); | |
+DEF_DLL_FN (double, PixelGetAlpha, (const PixelWand *)); | |
+DEF_DLL_FN (void, PixelGetMagickColor, (const PixelWand *, MagickPixelPacket *)); | |
+DEF_DLL_FN (PixelWand **, PixelGetNextIteratorRow, (PixelIterator *, size_t *)); | |
+DEF_DLL_FN (MagickBooleanType, PixelSetIteratorRow, (PixelIterator *, const ssize_t)); | |
+DEF_DLL_FN (void, PixelSetMagickColor, (PixelWand *, const MagickPixelPacket *)); | |
+DEF_DLL_FN (void, PixelSetRed, (PixelWand *, const double)); | |
+DEF_DLL_FN (void, PixelSetGreen, (PixelWand *, const double)); | |
+DEF_DLL_FN (void, PixelSetBlue, (PixelWand *, const double)); | |
+DEF_DLL_FN (MagickBooleanType, PixelSyncIterator, (PixelIterator *)); | |
+ | |
+DEF_DLL_FN (ExceptionInfo *, AcquireExceptionInfo, (void)); | |
+DEF_DLL_FN (ExceptionInfo *, DestroyExceptionInfo, (ExceptionInfo *)); | |
+DEF_DLL_FN (char *, DestroyString, (char *)); | |
+DEF_DLL_FN (char **, GetMagickList, (const char *, size_t *, ExceptionInfo *)); | |
+ | |
+static bool | |
+init_imagemagick_functions (void) | |
+{ | |
+ HMODULE magickwand, magickcore; | |
+ | |
+ if (!(magickcore = w32_delayed_load (Qmagickcore)) | |
+ || !(magickwand = w32_delayed_load (Qmagickwand))) | |
+ return 0; | |
+ | |
+ LOAD_DLL_FN (magickwand, CloneMagickWand); | |
+ LOAD_DLL_FN (magickwand, DestroyMagickWand); | |
+ LOAD_DLL_FN (magickwand, DestroyPixelIterator); | |
+ LOAD_DLL_FN (magickwand, DestroyPixelWand); | |
+#ifdef HAVE_MAGICKAUTOORIENTIMAGE | |
+ LOAD_DLL_FN (magickwand, MagickAutoOrientImage); | |
+#endif | |
+ LOAD_DLL_FN (magickwand, MagickCropImage); | |
+#ifdef HAVE_MAGICKEXPORTIMAGEPIXELS | |
+ LOAD_DLL_FN (magickwand, MagickExportImagePixels); | |
+#endif | |
+ LOAD_DLL_FN (magickwand, MagickGetException); | |
+ LOAD_DLL_FN (magickwand, MagickGetImage); | |
+ LOAD_DLL_FN (magickwand, MagickGetImageDelay); | |
+ LOAD_DLL_FN (magickwand, MagickGetImageDispose); | |
+ LOAD_DLL_FN (magickwand, MagickGetImageHeight); | |
+ LOAD_DLL_FN (magickwand, MagickGetImagePage); | |
+ LOAD_DLL_FN (magickwand, MagickGetImageSignature); | |
+ LOAD_DLL_FN (magickwand, MagickGetImageWidth); | |
+ LOAD_DLL_FN (magickwand, MagickGetNumberImages); | |
+#ifdef HAVE_MAGICKMERGEIMAGELAYERS | |
+ LOAD_DLL_FN (magickwand, MagickMergeImageLayers); | |
+#else | |
+ LOAD_DLL_FN (magickwand, MagickFlattenImages); | |
+#endif | |
+ LOAD_DLL_FN (magickwand, MagickReadImage); | |
+ LOAD_DLL_FN (magickwand, MagickReadImageBlob); | |
+ LOAD_DLL_FN (magickwand, MagickRelinquishMemory); | |
+ LOAD_DLL_FN (magickwand, MagickRotateImage); | |
+ LOAD_DLL_FN (magickwand, MagickScaleImage); | |
+ LOAD_DLL_FN (magickwand, MagickSetDepth); | |
+ LOAD_DLL_FN (magickwand, MagickSetFilename); | |
+ LOAD_DLL_FN (magickwand, MagickSetImageBackgroundColor); | |
+ LOAD_DLL_FN (magickwand, MagickSetIteratorIndex); | |
+ LOAD_DLL_FN (magickwand, MagickSetSize); | |
+ LOAD_DLL_FN (magickwand, MagickWandGenesis); | |
+ LOAD_DLL_FN (magickwand, MagickWandTerminus); | |
+ LOAD_DLL_FN (magickwand, NewMagickWand); | |
+ LOAD_DLL_FN (magickwand, NewPixelIterator); | |
+ LOAD_DLL_FN (magickwand, NewPixelWand); | |
+ LOAD_DLL_FN (magickwand, PixelGetAlpha); | |
+ LOAD_DLL_FN (magickwand, PixelGetMagickColor); | |
+ LOAD_DLL_FN (magickwand, PixelGetNextIteratorRow); | |
+ LOAD_DLL_FN (magickwand, PixelSetIteratorRow); | |
+ LOAD_DLL_FN (magickwand, PixelSetMagickColor); | |
+ LOAD_DLL_FN (magickwand, PixelSetRed); | |
+ LOAD_DLL_FN (magickwand, PixelSetGreen); | |
+ LOAD_DLL_FN (magickwand, PixelSetBlue); | |
+ LOAD_DLL_FN (magickwand, PixelSyncIterator); | |
+ | |
+ LOAD_DLL_FN (magickcore, AcquireExceptionInfo); | |
+ LOAD_DLL_FN (magickcore, DestroyExceptionInfo); | |
+ LOAD_DLL_FN (magickcore, DestroyString); | |
+ LOAD_DLL_FN (magickcore, GetMagickList); | |
+ | |
+ return 1; | |
+} | |
+ | |
+#undef CloneMagickWand | |
+#undef DestroyMagickWand | |
+#undef DestroyPixelIterator | |
+#undef DestroyPixelWand | |
+#undef MagickAutoOrientImage | |
+#undef MagickCropImage | |
+#undef MagickExportImagePixels | |
+#undef MagickGetException | |
+#undef MagickGetImage | |
+#undef MagickGetImageDelay | |
+#undef MagickGetImageDispose | |
+#undef MagickGetImageHeight | |
+#undef MagickGetImagePage | |
+#undef MagickGetImageSignature | |
+#undef MagickGetImageWidth | |
+#undef MagickGetNumberImages | |
+#ifdef HAVE_MAGICKMERGEIMAGELAYERS | |
+#undef MagickMergeImageLayers | |
+#else | |
+#undef MagickFlattenImages | |
+#endif | |
+#undef MagickReadImage | |
+#undef MagickReadImageBlob | |
+#undef MagickRelinquishMemory | |
+#undef MagickRotateImage | |
+#undef MagickScaleImage | |
+#undef MagickSetDepth | |
+#undef MagickSetFilename | |
+#undef MagickSetImageBackgroundColor | |
+#undef MagickSetIteratorIndex | |
+#undef MagickSetSize | |
+#undef MagickWandGenesis | |
+#undef MagickWandTerminus | |
+#undef NewMagickWand | |
+#undef NewPixelIterator | |
+#undef NewPixelWand | |
+#undef PixelGetAlpha | |
+#undef PixelGetMagickColor | |
+#undef PixelGetNextIteratorRow | |
+#undef PixelSetIteratorRow | |
+#undef PixelSetMagickColor | |
+#undef PixelSetRed | |
+#undef PixelSetGreen | |
+#undef PixelSetBlue | |
+#undef PixelSyncIterator | |
+#undef AcquireExceptionInfo | |
+#undef DestroyExceptionInfo | |
+#undef DestroyString | |
+#undef GetMagickList | |
+ | |
+#define CloneMagickWand fn_CloneMagickWand | |
+#define DestroyMagickWand fn_DestroyMagickWand | |
+#define DestroyPixelIterator fn_DestroyPixelIterator | |
+#define DestroyPixelWand fn_DestroyPixelWand | |
+#define MagickAutoOrientImage fn_MagickAutoOrientImage | |
+#define MagickCropImage fn_MagickCropImage | |
+#define MagickExportImagePixels fn_MagickExportImagePixels | |
+#define MagickGetException fn_MagickGetException | |
+#define MagickGetImage fn_MagickGetImage | |
+#define MagickGetImageDelay fn_MagickGetImageDelay | |
+#define MagickGetImageDispose fn_MagickGetImageDispose | |
+#define MagickGetImageHeight fn_MagickGetImageHeight | |
+#define MagickGetImagePage fn_MagickGetImagePage | |
+#define MagickGetImageSignature fn_MagickGetImageSignature | |
+#define MagickGetImageWidth fn_MagickGetImageWidth | |
+#define MagickGetNumberImages fn_MagickGetNumberImages | |
+#ifdef HAVE_MAGICKMERGEIMAGELAYERS | |
+#define MagickMergeImageLayers fn_MagickMergeImageLayers | |
+#else | |
+#define MagickFlattenImages fn_MagickFlattenImages | |
+#endif | |
+#define MagickReadImage fn_MagickReadImage | |
+#define MagickReadImageBlob fn_MagickReadImageBlob | |
+#define MagickRelinquishMemory fn_MagickRelinquishMemory | |
+#define MagickRotateImage fn_MagickRotateImage | |
+#define MagickScaleImage fn_MagickScaleImage | |
+#define MagickSetDepth fn_MagickSetDepth | |
+#define MagickSetFilename fn_MagickSetFilename | |
+#define MagickSetImageBackgroundColor fn_MagickSetImageBackgroundColor | |
+#define MagickSetIteratorIndex fn_MagickSetIteratorIndex | |
+#define MagickSetSize fn_MagickSetSize | |
+#define MagickWandGenesis fn_MagickWandGenesis | |
+#define MagickWandTerminus fn_MagickWandTerminus | |
+#define NewMagickWand fn_NewMagickWand | |
+#define NewPixelIterator fn_NewPixelIterator | |
+#define NewPixelWand fn_NewPixelWand | |
+#define PixelGetAlpha fn_PixelGetAlpha | |
+#define PixelGetMagickColor fn_PixelGetMagickColor | |
+#define PixelGetNextIteratorRow fn_PixelGetNextIteratorRow | |
+#define PixelSetIteratorRow fn_PixelSetIteratorRow | |
+#define PixelSetMagickColor fn_PixelSetMagickColor | |
+#define PixelSetRed fn_PixelSetRed | |
+#define PixelSetGreen fn_PixelSetGreen | |
+#define PixelSetBlue fn_PixelSetBlue | |
+#define PixelSyncIterator fn_PixelSyncIterator | |
+#define AcquireExceptionInfo fn_AcquireExceptionInfo | |
+#define DestroyExceptionInfo fn_DestroyExceptionInfo | |
+#define DestroyString fn_DestroyString | |
+#define GetMagickList fn_GetMagickList | |
+ | |
+#endif /* !WINDOWSNT */ | |
+ | |
/* Log ImageMagick error message. | |
Useful when an ImageMagick function returns the status `MagickFalse'. */ | |
@@ -8945,6 +9170,11 @@ | |
char **imtypes; | |
size_t i; | |
+#if WINDOWSNT | |
+ if (!init_imagemagick_functions ()) | |
+ return Qnil; | |
+#endif | |
+ | |
ex = AcquireExceptionInfo (); | |
imtypes = GetMagickList ("*", &numf, ex); | |
DestroyExceptionInfo (ex); | |
@@ -9959,6 +10189,10 @@ | |
#if defined (HAVE_IMAGEMAGICK) | |
DEFSYM (Qimagemagick, "imagemagick"); | |
ADD_IMAGE_TYPE (Qimagemagick); | |
+#if defined HAVE_NTGUI && !defined CYGWIN | |
+ DEFSYM (Qmagickwand, "magickwand"); | |
+ DEFSYM (Qmagickcore, "magickcore"); | |
+#endif /* HAVE_NTGUI */ | |
#endif | |
#if defined (HAVE_RSVG) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment