Hi All,

Some recent versions of ImageMagick have seen some changes to the .ico handling code to support reading 32 bit .ico files which contain a real alpha channel instead of an alpha 0/1 bitmask.

These changes have broken support for reading 24 bpp + alpha bitmask .ico files, by trying to read an alpha channel there, leading to an early eof.

This patch restores the reading of 24 bit .ico files, by not trying to read an alpha channel there, but instead use the alpha bitmask as ImageMagicke did a couple of releases ago.

And yes this patch is against a sligthly old version of ImageMagick, but the bug is still present in svn trunk.

Regards,

Hans
diff -up ImageMagick-6.3.8/coders/icon.c~ ImageMagick-6.3.8/coders/icon.c
--- ImageMagick-6.3.8/coders/icon.c~    2008-04-01 17:30:58.000000000 +0200
+++ ImageMagick-6.3.8/coders/icon.c     2008-04-01 17:30:58.000000000 +0200
@@ -501,7 +501,7 @@ static Image *ReadICONImage(const ImageI
             q->blue=ScaleCharToQuantum((unsigned char) ReadBlobByte(image));
             q->green=ScaleCharToQuantum((unsigned char) ReadBlobByte(image));
             q->red=ScaleCharToQuantum((unsigned char) ReadBlobByte(image));
-            if (image->matte != MagickFalse)
+            if (icon_info.bits_per_pixel == 32)
               q->opacity=(Quantum) QuantumRange-ScaleCharToQuantum(
                 (unsigned char) ReadBlobByte(image));
             q++;
@@ -527,7 +527,7 @@ static Image *ReadICONImage(const ImageI
         ThrowReaderException(CorruptImageError,"ImproperImageHeader");
     }
     (void) SyncImage(image);
-    if (icon_info.bits_per_pixel <= 16)
+    if (icon_info.bits_per_pixel != 32)
       {
         /*
           Read the ICON alpha mask.
_______________________________________________
Magick-bugs mailing list
[email protected]
http://studio.imagemagick.org/mailman/listinfo/magick-bugs

Reply via email to