diff -up dvdauthor/src/subgen-image.c~ dvdauthor/src/subgen-image.c --- dvdauthor/src/subgen-image.c~ 2010-03-13 10:14:07.000000000 +0200 +++ dvdauthor/src/subgen-image.c 2010-06-07 21:28:40.495577415 +0300 @@ -155,6 +155,13 @@ static void createimage(pict *s,int w,in } #if defined(HAVE_MAGICK) || defined(HAVE_GMAGICK) +// meaning of A in RGBA swapped in ImageMagick 6.0.0 and GraphicsMagick 1.3.8 +#if defined(HAVE_MAGICK) +#define XMAGICK_NEW_RGBA_MINVER 0x600 +#else // HAVE_GMAGICK +#define XMAGICK_NEW_RGBA_MINVER 0x060300 +#define ExportImagePixels DispatchImage +#endif static int read_magick(pict *s) /* uses ImageMagick/GraphicsMagick to read image s from s->fname. */ { @@ -162,6 +169,8 @@ static int read_magick(pict *s) ImageInfo *ii; ExceptionInfo ei; int x,y; + unsigned long magickver; + unsigned char amask; GetExceptionInfo(&ei); ii=CloneImageInfo(NULL); @@ -179,17 +188,13 @@ static int read_magick(pict *s) return -1; } createimage(s,im->columns,im->rows); + GetMagickVersion(&magickver); + amask = magickver < XMAGICK_NEW_RGBA_MINVER ? 255 : 0; for( y=0; y<im->rows; y++ ) { char pdata[MAXX*4]; - if(! -#ifdef HAVE_MAGICK - ExportImagePixels -#else // HAVE_GMAGICK - DispatchImage -#endif - (im,0,y,im->columns,1,"RGBA",CharPixel,pdata,&ei)) { - fprintf(stderr,"ERR: Extracting row %d from %s (%s,%s)\n",y,s->fname,ei.reason,ei.description); + if(!ExportImagePixels(im,0,y,im->columns,1,"RGBA",CharPixel,pdata,&ei)) { + fprintf(stderr,"ERR: Extracting row %d from %s (%s,%s)\n",y,s->fname,ei.reason,ei.description); CatchException(&ei); MagickError(ei.severity,ei.reason,ei.description); DestroyImage(im); @@ -201,13 +206,7 @@ static int read_magick(pict *s) p.r=pdata[x*4]; p.g=pdata[x*4+1]; p.b=pdata[x*4+2]; - // the meaning of RGBA swapped with ImageMagick 6.0.0... - // ...but not with GraphicsMagick -#if defined(HAVE_MAGICK) && MagickLibVersion >= 0x600 - p.t=pdata[x*4+3]; -#else - p.t=255-pdata[x*4+3]; -#endif + p.t = pdata[x*4+3] ^ amask; putpixel(s,y*s->width+x,&p); } }